`init_by_lua_block` 指令在 nginx 启动时没有被执行

我想让我的一个 lua 脚本在每次 nginx 服务器启动或重新加载时被执行。我尝试使用 init_by_lua_blockinit_by_lua_file 指令,但是当我运行 nginx 的 Docker 时,我没有看到 init_by_lua_block 中 lua 脚本的任何日志迹象。我的 http 块如下所示。nginx.config 位于容器路径 /etc/nginx/nginx.conf 中。

http {
    sendfile on;
    init_by_lua_block /etc/nginx/lua/init.lua;
    include /etc/nginx/conf.d/proxy-config.conf;
 }

请问有人能告诉我这里我错了什么吗?

点赞
用户9783845
用户9783845

init_by_lua_block

语法:init_by_lua_block { **lua-script** }

https://github.com/openresty/lua-nginx-module#init_by_lua_block

使用 init_by_lua_block 嵌入 Lua 代码,而非指向 Lua 文件的路径。

使用 dofile 执行 Lua 脚本:

init_by_lua_block {
  dofile('/etc/nginx/lua/init.lua')
}

https://www.lua.org/manual/5.1/manual.html#pdf-dofile

或者使用 init_by_lua_file

init_by_lua_file /etc/nginx/lua/init.lua;

更新信息:

init_by_lua_* 指令中,应使用 NOTICE 或更高级别的日志级别,因为在此阶段并未应用 error_log 配置:

在幕后,init_by_lua 在 nginx 配置加载阶段运行,因此您在 nginx.conf 中的 error_log 配置不会生效,直到整个配置成功加载(由于引导需求:配置加载可能会失败)。 nginx 最初使用带有注意过滤级别的日志记录器进行启动,其在整个第一个配置加载过程中生效(但不是由 HUP 信号触发的后续配置重新加载)。

https://github.com/openresty/lua-nginx-module/issues/467#issuecomment-82647228

因此,使用 ngx.log(ngx.NOTICE, ...)(或 ngx.WARNngx.ERR 等 - 请参见 https://github.com/openresty/lua-nginx-module#nginx-log-level-constants)来在日志中查看输出。

另外,您也可以使用 print。其在幕后等效于 ngx.log(ngx.NOTICE, ...)https://github.com/openresty/lua-nginx-module#print

2020-07-16 18:24:59