J'ai un simple proxy inverse nginx:
server {
server_name external.domain.com;
location / {
proxy_pass http://backend.int/;
}
}
Le problème est que Set-Cookie
les en-têtes de réponse contiennent ;Domain=backend.int
, car le backend ne sait pas qu'il est en cours de proxy inverse.
Comment puis-je faire réécrire nginx le contenu des en- Set-Cookie
têtes de réponse, en remplaçant ;Domain=backend.int
par ;Domain=external.domain.com
?
Passer l'en- Host
tête inchangé n'est pas une option dans ce cas.
Apache httpd a cette fonctionnalité depuis un certain temps, voyez ProxyPassReverseCookieDomain
, mais je n'arrive pas à trouver un moyen de faire la même chose dans nginx.
Réponses:
Depuis la version 1.1.15, l'option proxy_cookie_domain a été ajoutée pour résoudre ce problème.
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain
la source
La réponse de @shamer fonctionne bien avec plusieurs en-
Set-Cookie
têtes de réponse, mais elle échoue s'il n'y en a qu'un. Comme l'agentzh le fait remarquer à la fin du thread référencé,if type(cookies) ~= "table" then cookies = {cookies} end
est nécessaire pour gérer ce cas.Voici le tout:
la source
Cette question est apparue dans la liste de diffusion nginx [1]. Il n'y a aucun moyen de le faire directement dans nginx. Vous devez recourir à l'utilisation du module ngx_lua (> = v0.3.1).
L'utilisateur "agentzh" a un exemple de ce à quoi cela ressemblerait dans le fichier de configuration:
[1] http://nginx.2469901.n2.nabble.com/Rewriting-the-domain-part-of-Set-Cookie-in-a-proxy-pass-td6453554.html
la source