Lua在nginx中的包路径

时间:2013-08-04 06:14:04

标签: nginx lua

我现在正在使用nginx在Lua中编程。我编写了我的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服务器的目录不应该受到限制, 但我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:16)

您想要修改Lua package.path以在您拥有源代码的目录中进行搜索。对你来说,那是lua/

你使用lua_package_path指令在http块中执行此操作(文档说你可以将它放在顶层,但是当我尝试它时它不起作用)。

所以对你:

http {
    #the scripts in lua/ need to refer to each other
    #but the server runs in lua/..

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

    ...
}

现在你的lua脚本可以找到对方,即使服务器运行一个目录。

答案 1 :(得分:0)

您现在可以使用$ prefix。

例如

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

像这样启动您的nginx

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

然后搜索路径将是

/opt/lua