У меня есть простой обратный прокси-сервер nginx:
server {
server_name external.domain.com;
location / {
proxy_pass http://backend.int/;
}
}
Проблема состоит в том, что Set-Cookie
заголовки ответа содержат ;Domain=backend.int
, потому что серверная часть не знает, что это обратный прокси.
Как я могу заставить nginx переписывать содержимое Set-Cookie
заголовков ответов, заменяя их ;Domain=backend.int
на ;Domain=external.domain.com
?
Передача Host
заголовка без изменений в этом случае не подходит.
Понимаете, Apache httpd уже некоторое время имел эту возможность ProxyPassReverseCookieDomain
, но я не могу найти способ сделать то же самое в nginx.
cookies
nginx
rewrite
reverse-proxy
Тобия
источник
источник
Ответы:
Начиная с версии 1.1.15 для решения этой проблемы была добавлена опция proxy_cookie_domain.
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain
источник
Ответ от @shamer отлично работает с несколькими
Set-Cookie
заголовками ответа, но не получается, если есть только один. Как указывает agentzh в конце упомянутого потока,if type(cookies) ~= "table" then cookies = {cookies} end
необходимо обработать этот случай.Вот и все:
источник
Этот вопрос возник в списке рассылки nginx [1]. Нет прямого способа сделать это в nginx. Вы должны прибегнуть к использованию модуля ngx_lua (> = v0.3.1).
У пользователя "agentzh" есть пример того, как это будет выглядеть встраиваемым в файл конфигурации:
[1] http://nginx.2469901.n2.nabble.com/Rewriting-the-domain-part-of-Set-Cookie-in-a-proxy-pass-td6453554.html
источник