nginx - Benutzerdefinierten Header vom Upstream-Server lesen


80

Ich verwende nginx als Reverse-Proxy und versuche erfolglos, einen benutzerdefinierten Header aus der Antwort eines Upstream-Servers (Apache) zu lesen. Die Apache-Antwort lautet wie folgt:

HTTP/1.0 200 OK
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.10
Connection: close
Content-Type: application/json; charset=UTF-8
My-custom-header: 1

Ich möchte den Wert aus My-custom-header lesen und in einer if-Klausel verwenden:

location / {
    // ...
    // get My-custom-header value here
    // ...
}

Ist das möglich? Danke im Voraus.

Antworten:


91

$ http _ name_of_the_header_key

dh wenn Sie origin = domain.comin Header haben, können Sie verwenden $http_origin, um " domain.com " zu erhalten

In nginx wird ein beliebiges Anforderungsheaderfeld unterstützt. Im obigen Beispiel ist der letzte Teil eines Variablennamens der Feldname, der in Kleinbuchstaben umgewandelt wird, wobei Bindestriche durch Unterstriche ersetzt werden

Referenzdokument hier: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

Für Ihr Beispiel wäre die Variable $http_my_custom_header.


3
Eigentlich ist das falsch und sollte nicht als Antwort markiert werden. Für jeden, der in Zukunft darauf stößt, ist die richtige Variable $http_. Am Beispiel von OP $http_my_custom_header(Groß- und Kleinschreibung
beachten

Ich habe diese Antwort korrigiert, um sie mit der Dokumentation
Paul Dixon

12
Wie sich herausstellt, ist dies auch nicht richtig. OP hat gefragt, ob der Wert für einen Antwortheader gelesen werden soll. Sie sollten verwenden $sent_http_my_custom_header. nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
Nathan

check @ dev-gosain Antwort unten, wenn Sie Upstream-Antwort-Header benötigen
Filimonov

13
Die Antwort ist falsch. Die fragende Person versucht, vom Upstream- Server auf den Header zuzugreifen . Die richtige Antwort lautet stackoverflow.com/a/30879181/111995
geekQ

48

Ich stand vor dem gleichen Problem. Ich habe beides versucht $http_my_custom_headerund $sent_http_my_custom_headeres hat bei mir nicht funktioniert.

Obwohl dieses Problem mit gelöst $upstream_http_my_custom_header.


8

Verwenden Sie $ http_MY_CUSTOM_HEADER

Sie können so etwas schreiben

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}

6
Mann sagt - der letzte Teil eines Variablennamens ist der Feldname, der in Kleinbuchstaben umgewandelt wird, wobei Bindestriche durch Unterstriche ersetzt werden.
Arjun Sreedharan

Sie sparte mein Tag, Dank
mos
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.