Nginx:未知指令“ngx.flush(true)”

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

我的配置有什么问题?我需要激活什么才能在 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_luarewrite_by_luacontent_by_lua

你应该看看 nginx维基页面

请注意,执行 Lua 代码的每个上下文都旨在执行不同的任务,并在处理和服务请求时在不同的时间运行。
这使得以通用方式解释代码行为、代码要求或可用功能几乎是不可能的

相关内容