Я знаю, что есть фазы 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)
}
Это не то, что я хочу, но я попросил обходной путь. Если у кого-то есть лучший, продолжайте.