Директива init_by_lua_block не выполняется при запуске nginx

Я хотел, чтобы один из моих lua-скриптов выполнялся всякий раз, когда сервер nginx запускается или перезагружается. Я пытался использовать директиву init_by_lua_block и init_by_lua_file, но не вижу следов журнала для сценария lua в init_by_lua_block, когда запускаю докер nginx. Мой блок 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;
 }

Может ли кто-нибудь сказать мне, что мне здесь не хватает?


person Sarga    schedule 16.07.2020    source источник


Ответы (1)


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;

ОБНОВЛЕНИЕ:

Вы должны использовать уровень ведения журнала NOTICE (или выше) в директивах init_by_lua_*, потому что ваша конфигурация error_log еще не применена на этом этапе:

Под капотом init_by_lua запускается на этапе загрузки конфигурации nginx, поэтому ваша конфигурация error_log в nginx.conf не вступает в силу до тех пор, пока вся конфигурация не будет успешно загружена (из-за требований начальной загрузки: загрузка конфигурации МОЖЕТ завершиться неудачей). И nginx изначально использует логгер с уровнем фильтрации NOTICE при запуске, который влияет на весь процесс загрузки первой конфигурации (но не на последующую (повторную) загрузку конфигурации, запускаемую сигналом HUP).

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

Итак, используйте ngx.log(ngx.NOTICE, ...) (или ngx.WARN, ngx.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

person un.def    schedule 16.07.2020
comment
Я обновил ответ. Вероятно, это проблема с уровнем ведения журнала, который вы используете (извините, я пропустил часть вашего вопроса «не вижу никаких трассировок журнала»). - person un.def; 17.07.2020