Nginx: неизвестная директива "ngx.flush(true)"
У меня проблемы с использованием nginx devel (ndk) и lua-module. Я скомпилировал nginx-rpm, используя следующую конфигурацию:
./configure \
--prefix=%{_sysconfdir}/nginx/ \
--sbin-path=%{_sbindir}/nginx \
--conf-path=%{_sysconfdir}/nginx/nginx.conf \
--error-log-path=%{_localstatedir}/log/nginx/error.log \
--http-log-path=%{_localstatedir}/log/nginx/access.log \
--pid-path=%{_localstatedir}/run/nginx.pid \
--lock-path=%{_localstatedir}/run/nginx.lock \
--http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \
--http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \
--user=%{nginx_user} \
--group=%{nginx_group} \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-cc-opt="%{optflags} $(pcre-config --cflags)" \
--add-module=%{_builddir}/nginx-%{version}/mods/upload_progress \
--add-module=%{_builddir}/nginx-%{version}/mods/ngx_devel_kit \
--add-module=%{_builddir}/nginx-%{version}/mods/lua-nginx-module \
призвание nginx -V
после установки также показывает, что ngx и lua вроде бы установлены / активированы. Но... когда я делаю следующее:
location /abc/ {
# For demonstration purposes only...
ngx.flush(true);
expires 30d;
}
Я всегда получаю следующую ошибку:
nginx: [emerg] unknown directive "ngx.flush(true)" in /etc/nginx/conf.d/default.conf:53
nginx: configuration file /etc/nginx/nginx.conf test failed
Что не так с моей конфигурацией? Что-нибудь, что мне нужно активировать, чтобы использовать ngx-директивы в conf-файле?
Заранее спасибо за любое предложение!
1 ответ
ngx.flush()
является одной из функций Lua NginxLuaModule, а не директивой конфигурации nginx.
Чтобы добиться желаемого поведения (просто очистите содержимое), сделайте следующее:
location /abc/ {
content_by_lua '
ngx.flush(true);
';
expires 30d;
}
Вы должны обернуть код Lua в один из *_by_lua
директивы или загрузить код из файла, используя один из *_by_lua_file
директивы в вашем конфиге nginx.
Lua-код может выполняться в разных контекстах, например, для установки переменной (set_by_lua
), в состоянии перезаписи (rewrite_by_lua
), чтобы обслуживать контент (content_by_lua
) или другие.
Вы должны взглянуть на вики-страницу nginx.
Обратите внимание, что каждый контекст выполнения кода Lua предназначен для выполнения разных задач и выполняется в разное время при обработке и обслуживании запроса.
Это делает практически невозможным общее объяснение поведения кода, требований к коду или доступных функций.