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.

Luis
quelle

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.

Cobaco
quelle
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.

Dev Gosain
quelle
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;
}
Vladimir
quelle
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