Nginx gibt benutzerdefinierten Header zurück


13

Ich habe das folgende Beispiel

           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;
            }

Wenn ich jetzt die folgende Lockenlinie benutze

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

Nun, das funktioniert nicht. Der Apache / PHP im Backend sieht den Header nicht. Wenn ich Nginx umgehe, funktioniert es

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test

Antworten:



2

Sie sollten proxy_set_headerfür alle Header verwenden, die Sie an die Backend-Server weiterleiten möchten. Also statt proxy_pass_header ...Linie:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

Ich habe das versucht und es setzt den Header nicht richtig. Wenn ich $ http_x_custom_header durch "foo" ersetze, funktioniert es
Mike

Ich bin mir nicht sicher, warum es bei @Mike nicht funktioniert hat, aber es hat bei mir funktioniert. Ich verwende X-Forwarded-Proto mit $ http_x_forwarded_proto.
Tyler Collier

2

Das obige hat auch bei mir nicht funktioniert, also habe ich es benutzt proxy_pass_header. Das Nginx-Wiki zu proxy_pass_header finden Sie hier .

Wenn Ihr benutzerdefinierter Header zu Ihrem Proxy-Block device_idhinzugefügt wird proxy_pass_header device_id;.

Wenn Sie benutzerdefinierte Header mit einem Unterstrich verwenden (wie ich), stellen Sie sicher, dass Sie diese underscores_in_headers onin Ihrer Nginx-Konfiguration haben.


Vielen Dank ! Ich habe mir die Haare ausgezogen ... Ihr Beitrag hat mich entlastet ...
Fahad Ahammed

1

Standardmäßig leitet der Nginx alle ( proxy_pass_request_headers on; ) Header an den Backend-Server weiter. Wenn Ihr Anforderungsheader (möglicherweise ein benutzerdefinierter Header) einen Unterstrich (_) im Headernamen enthält, blockiert nginx diese Header.

Ex: authenticate_type, cdn_enable.

Damit Nginx alle oder den benutzerdefinierten angeforderten Header an das Backend übergeben kann, aktivieren Sie die Unterstrichoption.

underscores_in_headers on;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.