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ę.

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.


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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.