在nginx中 Lua 的包路径

我现在正在使用 Lua 和 nginx 进行编程。我编写我的 Lua 文件并将其放入 /usr/local/nginx/lua 目录中。然后在 nginx.conf 中编写一个位置,例如:

location /lua {
    lua_need_request_body on;
    content_by_lua_file lua/test.lua;
}

当我通过 Nginx 访问此位置时,Lua 脚本将被执行。

在 Lua 文件中,通常可以包括您自己的 Lua 模块,并指示搜索路径

common_path = '../include/?.lua;'
package.path = common_path .. package.path

在常规 Lua 编程中,相对路径是相对于我的 Lua 文件的。

但是使用 nginx 时,相对路径是相对于我启动 Nginx 的目录的。

比如,我在 /usr/local/nginx 中执行 sbin/nginx,那么在 Lua 中,package.path 将是 /usr/local/include

如果我在 /usr/local/nginx/sbin 中执行 ./nginx,那么在 Lua 中 package.path 将是 /usr/local/nginx/include

我认为我启动 nginx 服务器的目录不应受限制,但我不知道该如何解决这个问题。

点赞
用户2276005
用户2276005

你想修改 Lua 的 package.path 以在源代码所在目录中搜索。对于你来说,这是 lua/

你可以在 http 块中使用 lua_package_path 指令来实现这一点(文档说可以将其放在顶级,但我尝试过并不起作用)。

所以对于你来说:

http {
    #lua/ 目录下的脚本需要相互引用
    #但服务器在 lua/ 目录下..

    lua_package_path "./lua/?.lua;;";

    ...
}

现在你的 Lua 脚本可以找到彼此,即使服务器运行在上一级目录。

2013-09-21 15:52:47
用户5245972
用户5245972

你现在可以使用 $prefix

例如:

http{
    lua_package_path "$prefix/lua/?.lua;;";
}

然后像这样启动 nginx:

nginx -p /opt -c /etc/nginx.conf

这时搜索路径会变成:

/opt/lua
2019-05-10 11:50:03