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
nginx
http-headers
Mike
quelle
quelle
Sie sollten
proxy_set_header
für alle Header verwenden, die Sie an die Backend-Server weiterleiten möchten. Also stattproxy_pass_header ...
Linie:quelle
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_id
hinzugefügt wirdproxy_pass_header device_id;
.Wenn Sie benutzerdefinierte Header mit einem Unterstrich verwenden (wie ich), stellen Sie sicher, dass Sie diese
underscores_in_headers on
in Ihrer Nginx-Konfiguration haben.quelle
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.
Damit Nginx alle oder den benutzerdefinierten angeforderten Header an das Backend übergeben kann, aktivieren Sie die Unterstrichoption.
quelle