nginx passant en-tête personnalisé


13

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

Réponses:



2

Vous devez utiliser proxy_set_headerpour tous les en-têtes que vous souhaitez transmettre aux serveurs principaux. Donc au lieu de la proxy_pass_header ...ligne:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

J'ai essayé cela et il ne définit pas correctement l'en-tête, si je remplace $ http_x_custom_header par "foo" cela fonctionne
Mike

Je ne sais pas pourquoi cela n'a pas fonctionné pour @Mike mais cela a fonctionné pour moi. J'utilise X-Forwarded-Proto avec $ http_x_forwarded_proto.
Tyler Collier

2

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_idajouté 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 ondans votre configuration Nginx.


Merci beaucoup !
J'arrachais

1

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.

Ex: authenticate_type, cdn_enable.

Pour permettre à Nginx de transmettre tout ou l'en-tête demandé personnalisé au backend, activez l'option de soulignement.

underscores_in_headers on;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.