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 предназначен для выполнения разных задач и выполняется в разное время при обработке и обслуживании запроса.
Это делает практически невозможным общее объяснение поведения кода, требований к коду или доступных функций.

Другие вопросы по тегам