Назад | Перейти на главную страницу

Порядок перезаписи / возврата в Nginx

Я знаю, что есть фазы Nginx. Почему следующий фрагмент кода предоставляет "200 Host: example.com" вместо пересылки в Google? Каким может быть обходной путь для оценки Lua выше или раньше?

server
{
    listen 80;
    server_name example.com;

    location /
    {
        rewrite_by_lua_block
        {
            return ngx.redirect('https://www.google.com/', 303)
        }

        default_type text/plain;
        return 200 "Host: $host";
    }
}

Возможно, это не имеет смысла на первый взгляд, но у меня есть разумный способ блокировать / перенаправлять определенные вызовы в блоке Lua (или в файле Lua, включенном на данный момент). Этот модуль должен работать в целом. С proxy_pass, псевдонимом и т.д. он работает нормально. Только с возвратом 200 не работает. Есть у кого-нибудь идеи?

https://github.com/openresty/lua-nginx-module#rewrite_by_lua

Обратите внимание, что этот обработчик всегда запускается после стандартный модуль ngx_http_rewrite_module.

Так return 200 всегда выполняется до rewrite_by_lua_block.

В вашем случае вам следует придерживаться rewrite_by_lua_block (не проверял)

if condition then
    return ngx.redirect('https://www.google.com/', 303)
else
    ngx.print("Hello");
    return ngx.exit(ngx.HTTP_OK)
end

Кредиты Алексею Тену.


В качестве промежуточного вывода (пока не будет доказано обратное) вместо прямого использования кода Nginx я должен реализовать return 200 в Lua.

        rewrite_by_lua_block {
            -- Will be executed. Can of course be combined with a condition.
            return ngx.redirect('https://www.google.com/', 303)
        }

        content_by_lua_block {
            ngx.header["Content-Type"] = "text/plain"
            ngx.print("Host: "..ngx.var.host)
            return ngx.exit(ngx.HTTP_OK)
        }

Это не то, что я хочу, но я попросил обходной путь. Если у кого-то есть лучший, продолжайте.