我在使用 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
我的配置有什么问题?我需要激活什么才能在 conf 文件中使用 ngx-directives?
提前感谢任何建议!
答案1
ngx.flush()
是 NginxLuaModule 的 Lua 函数之一,而不是 nginx 配置指令。
要实现您似乎想要的行为(仅刷新内容),请执行以下操作:
location /abc/ {
content_by_lua '
ngx.flush(true);
';
expires 30d;
}
您必须将 Lua 代码包装到其中一个指令中,或者使用nginx 配置中的*_by_lua
一个指令从文件加载代码。Lua 代码可以在不同的上下文中执行,例如设置变量 ( )、重写状态 ( )、提供内容 ( ) 或其他。*_by_lua_file
set_by_lua
rewrite_by_lua
content_by_lua
你应该看看 nginx维基页面。
请注意,执行 Lua 代码的每个上下文都旨在执行不同的任务,并在处理和服务请求时在不同的时间运行。
这使得以通用方式解释代码行为、代码要求或可用功能几乎是不可能的