nginx - odczytaj niestandardowy nagłówek z serwera nadrzędnego

81

Używam Nginx jako odwrotnego proxy i próbuję odczytać niestandardowy nagłówek z odpowiedzi serwera nadrzędnego (Apache) bez powodzenia. Odpowiedź Apache jest następująca:

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

Chcę odczytać wartość z My-custom-header i użyć jej w klauzuli if:

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

czy to możliwe? Z góry dziękuję.

luis
źródło

Odpowiedzi:

93

$ http _ name_of_the_header_key

tzn. jeśli masz origin = domain.comw nagłówku, możesz użyć, $http_originaby uzyskać „ domena.com

W nginx obsługuje dowolne pole nagłówka żądania. W powyższym przykładzie ostatnią częścią nazwy zmiennej jest nazwa pola zamieniona na małe litery z myślnikami zastąpionymi podkreśleniami

Dokument referencyjny tutaj: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

Na przykład zmienną będzie $http_my_custom_header.

Cobaco
źródło
3
Właściwie to źle i nie powinno być oznaczane jako odpowiedź. Dla każdego, kto zetknie się z tym w przyszłości, właściwą zmienną jest $http_. Na przykładzie OP $http_my_custom_header(rozróżniana jest
wielkość
Poprawiłem tę odpowiedź, aby pasowała do dokumentacji;)
Paul Dixon
14
Jak się okazuje, to też nie jest poprawne. OP poprosił o odczytanie wartości nagłówka odpowiedzi. Powinieneś użyć $sent_http_my_custom_header. nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
Nathan
sprawdź odpowiedź @ dev-gosain poniżej, jeśli potrzebujesz nagłówka odpowiedzi upstream
filimonov
14
odpowiedź jest zła. Osoba pytająca próbuje uzyskać dostęp do nagłówka z serwera nadrzędnego . Prawidłowa odpowiedź to stackoverflow.com/a/30879181/111995
geekQ
50

Miałem ten sam problem. Próbowałem obu $http_my_custom_headeri $sent_http_my_custom_headerale to nie zadziałało.

Chociaż rozwiązano ten problem za pomocą $upstream_http_my_custom_header.

Dev Gosain
źródło
8

Użyj $ http_MY_CUSTOM_HEADER

Możesz napisać coś takiego

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}
Vladimir
źródło
6
mówi man - ostatnią częścią nazwy zmiennej jest nazwa pola zamieniona na małe litery z myślnikami zastąpionymi podkreśleniami.
Arjun Sreedharan
Uratowałeś mój dzień, dzięki
mos