J'ai l'exemple suivant
location / {
proxy_read_timeout 2000;
proxy_next_upstream error;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass_header X_CUSTOM_HEADER;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass https://prod;
break;
}
Maintenant, quand j'utilise la ligne de bouclage suivante
curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test
Maintenant cela ne fonctionne pas .. l'apache / php sur le backend ne voit pas l'en-tête. Si je contourne nginx ça marche
curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test
nginx
http-headers
Mike
la source
la source
Vous devez utiliser
proxy_set_header
pour tous les en-têtes que vous souhaitez transmettre aux serveurs principaux. Donc au lieu de laproxy_pass_header ...
ligne:la source
Ce qui précède n'a pas fonctionné pour moi non plus, j'ai donc utilisé
proxy_pass_header
. Voir le wiki Nginx sur proxy_pass_header ici .Si votre en-tête personnalisé est
device_id
ajoutéproxy_pass_header device_id;
à votre bloc proxy.Si vous utilisez des en-têtes personnalisés avec un trait de soulignement (comme je le suis), assurez-vous de l'avoir
underscores_in_headers on
dans votre configuration Nginx.la source
Par défaut, le nginx transmet tous les ( proxy_pass_request_headers sur; ) l'en-tête au serveur principal. Mais si votre en-tête de demande (peut être un en-tête personnalisé) inclut un trait de soulignement (_) dans le nom de l'en-tête, alors nginx bloque ces en-têtes.
Pour permettre à Nginx de transmettre tout ou l'en-tête demandé personnalisé au backend, activez l'option de soulignement.
la source