Mam proste odwrotne proxy Nginx:
server {
server_name external.domain.com;
location / {
proxy_pass http://backend.int/;
}
}
Problem polega na tym, że Set-Cookie
zawierają nagłówki odpowiedzi ;Domain=backend.int
, ponieważ backend nie wie, że jest odwrotnie proxy.
Jak zmusić nginx do przepisania zawartości Set-Cookie
nagłówków odpowiedzi, zastępując ;Domain=backend.int
je ;Domain=external.domain.com
?
Przekazanie Host
nagłówka bez zmian nie jest opcją w tym przypadku.
Widzicie ProxyPassReverseCookieDomain
, Apache httpd ma tę funkcję od dłuższego czasu , ale nie mogę znaleźć sposobu, aby zrobić to samo w Nginx.
cookies
nginx
rewrite
reverse-proxy
Tobia
źródło
źródło
Odpowiedzi:
Począwszy od 1.1.15, dodano opcję proxy_cookie_domain, aby rozwiązać ten problem.
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain
źródło
Odpowiedź z @shamer działa dobrze z wieloma
Set-Cookie
nagłówkami odpowiedzi, ale kończy się niepowodzeniem, jeśli jest tylko jeden. Jak wskazuje agentzh na końcu przywoływanego wątku,if type(cookies) ~= "table" then cookies = {cookies} end
potrzebna jest obsługa tego przypadku.Oto cała sprawa:
źródło
To pytanie pojawiło się na liście mailingowej nginx [1]. W Nginx nie ma bezpośredniego sposobu, aby to zrobić. Musisz skorzystać z modułu ngx_lua (> = v0.3.1).
Użytkownik „agentzh” ma przykład tego, jak by to wyglądało, wstawione w pliku konfiguracyjnym:
[1] http://nginx.2469901.n2.nabble.com/Rewriting-the-domain-part-of-Set-Cookie-in-a-proxy-pass-td6453554.html
źródło