Eu tenho um proxy reverso nginx simples:
server {
server_name external.domain.com;
location / {
proxy_pass http://backend.int/;
}
}
O problema é que os Set-Cookie
cabeçalhos de resposta contêm ;Domain=backend.int
, porque o back-end não sabe que está sendo proxy reverso.
Como posso fazer com que o nginx reescreva o conteúdo dos Set-Cookie
cabeçalhos de resposta, substituindo ;Domain=backend.int
por ;Domain=external.domain.com
?
Passar o Host
cabeçalho inalterado não é uma opção neste caso.
O Apache httpd possui esse recurso há algum tempo, veja ProxyPassReverseCookieDomain
, mas não consigo encontrar uma maneira de fazer o mesmo no nginx.
cookies
nginx
rewrite
reverse-proxy
Tobia
fonte
fonte
Respostas:
A partir de 1.1.15, a opção proxy_cookie_domain foi adicionada para solucionar esse problema.
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain
fonte
A resposta do @shamer funciona bem com
Set-Cookie
cabeçalhos de várias respostas, mas falha se houver apenas um. Como o agentzh aponta no final do encadeamento referenciado,if type(cookies) ~= "table" then cookies = {cookies} end
é necessário para lidar com esse caso.Aqui está a coisa toda:
fonte
Esta questão surgiu na lista de discussão nginx [1]. Não há como fazer isso diretamente no nginx. Você precisa recorrer ao módulo ngx_lua (> = v0.3.1).
O usuário "agentzh" tem um exemplo de como isso seria descrito no arquivo de configuração:
[1] http://nginx.2469901.n2.nabble.com/Rewriting-the-domain-part-of-Set-Cookie-in-a-proxy-pass-td6453554.html
fonte