文档地址:https://github.com/openresty/lua-nginx-module
lua_package_path
syntax: lua_package_path <lua-style-path-str>
default: The content of LUA_PATH environment variable or Lua's compiled-in defaults.
context: http
使用set_by_lua, content_by_lua等指定的脚本来设置Lua module的搜索路径。路径字符串采用标准Lua路径形式,;;
可用于表示原始搜索路径。
从v0.5.0rc29
发行版开始,特殊符号$prefix
或${prefix}
可用于搜索路径字符串中,以指示在启动Nginx服务器时server prefix,该路径
通常由-p PATH
命令行选项确定的路径。
lua_package_cpath
syntax: lua_package_cpath <lua-style-cpath-str>
default: The content of LUA_CPATH environment variable or Lua's compiled-in defaults.
context: http
使用set_by_lua, content_by_lua等指定的脚本设置Lua C-module的搜索路径。cpath字符串采用标准的Lua cpath形式,;;
用来代表原始cpath。
从v0.5.0rc29
发行版开始,特殊符号$prefix
或${prefix}
可用于搜索路径字符串中,来指示server prefix在启动Nginx服务器时
通常由-p PATH
命令行选项来确定该路径。
content_by_lua_file
语法: content_by_lua_file <path-to-lua-script-file>
上下文: location, location if
阶段: content
等同于content_by_lua,不同之处在于指定的文件<path-to-lua-script-file>
包含Lua代码,或者从v0.5.0rc32
发行版开始将执行Lua / LuaJIT bytecode。
可以在<path-to-lua-script-file>
字符串中使用Nginx变量来提供灵活性。然而,这存在一些风险,通常不推荐。
当给出一个相对路径比如foo/bar.lua时,在启动Nginx服务器时,它们将变成相对于由-p PATH
命令行选项确定的server prefix
路径的绝对路径。
当Lua代码缓存打开时(默认情况下),用户代码将在第一次请求时加载一次并缓存,并且每次Lua源文件修改时都必须重新加载Nginx配置。可以在开发过程中临时禁用Lua code cache,通过在nginx.conf中通过切换lua_code_cache off,以避免重新加载Nginx。
在动态分派的文件路径中支持Nginx变量,例如:
# CAUTION: contents in nginx var must be carefully filtered,
# otherwise there'll be great security risk!
location ~ ^/app/([-_a-zA-Z0-9/]+) {
set $path $1;
content_by_lua_file /path/to/lua/app/root/$path.lua;
}
但要小心恶意用户输入,并且始终仔细验证或过滤用户提供的路径组件。
lua_code_cache
语法: lua_code_cache on | off
默认: lua_code_cache on
上下文: http, server, location, location if
在*_by_lua_file
指令(如set_by_lua_file和 content_by_lua_file)和Lua模块中为Lua代码启用或禁用Lua代码缓存。
关闭时,ngx_lua提供的每个请求将从0.9.3
发行版开始,在单独的Lua VM实例中运行。因此,set_by_lua_file,content_by_lua_file,access_by_lua_file等中引用的Lua文件不会被缓存,所有使用的Lua模块都将从头开始加载。有了这个,开发人员可以采用编辑和刷新方法。
但请注意,当您在nginx.conf文件中编辑内联Lua代码时,在nginx.conf中内联写入的Lua代码(如由set_by_lua,content_by_lua, access_by_lua和rewrite_by_lua指定的代码)将不会更新。因为只有Nginx配置文件解析器可以正确解析nginx.conf这个文件,所以唯一的方法是通过发送一个HUP
信号或重新启动Nginx 来重新加载配置文件,。
即使启用代码缓存,由dofile
或者loadfile
装载Lua的文件在* _by_lua_file不能被缓存(除非你自己缓存结果)。通常你可以使用init_by_lua 或者init_by_lua_file指令来加载所有这些文件,或者使这些Lua文件成为真正的Lua模块并通过require加载它们。
ngx_lua模块不支持stat模式,
Apache mod_lua
模块。
强烈建议禁用Lua代码缓存以供生产使用,并且仅应在开发过程中使用,因为它会对整体性能产生重大负面影响。例如,禁用Lua代码缓存后,“hello world”Lua示例的性能可能会下降一个数量级
lua_shared_dict
syntax: lua_shared_dict <name> <size>
default: no
context: http
phase: depends on usage
声明一个共享内存区域,<name>
作为存储基于Lua词典的ngx.shared.<name>的
shm。
在当前的nginx server实例中,共享内存区域总是由所有nginx工作进程共享。
<size>
参数接受诸如k
和m的大小单位
:
http {
lua_shared_dict dogs 10m;
...
}
硬编的最小size为8KB,而实际的最小大小取决于实际的用户数据设置(有些人以12KB开头)。
有关详细信息,请参阅ngx.shared.DICT。
该指令是在该v0.3.1rc22
版本中首次引入的。