Lua在nginx中的包路径

fre*_*doo 12 lua nginx

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

location /lua {
    lua_need_request_body on;
    content_by_lua_file lua/test.lua;
}
Run Code Online (Sandbox Code Playgroud)

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

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

common_path = '../include/?.lua;'
package.path = common_path .. package.path
Run Code Online (Sandbox Code Playgroud)

在常见的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服务器的目录不应该受到限制,但我不知道如何解决这个问题.

Wol*_*ivy 17

您想修改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;;";

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • 值得注意的是,`;;`附加了默认的package.path,而不是拼写错误. (5认同)