nginx - читання користувацького заголовка з сервера вище


81

Я використовую nginx як зворотний проксі і намагаюся без успіху прочитати власний заголовок з відповіді висхідного сервера (Apache). Відповідь Apache така:

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

Я хочу прочитати значення з My-custom-header і використати його в реченні if:

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

Чи можливо це? Заздалегідь спасибі.

Відповіді:


93

$ http _ name_of_the_header_key

тобто якщо у вас є origin = domain.comзаголовок, ви можете використовувати, $http_originщоб отримати " domain.com "

У nginx підтримує довільне поле заголовка запиту. У наведеному вище прикладі останньою частиною імені змінної є ім'я поля, перетворене в нижній регістр із тире, замінене на підкреслення

Довідковий документ тут: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

Для вашого прикладу змінною буде $http_my_custom_header.


3
Насправді це неправильно, і відповідь на це не повинна бути позначена. Для тих, хто зіткнеться з цим у майбутньому, правильною змінною буде $http_. Використовуючи OP як приклад, $http_my_custom_header(це чутливо до регістру!)
jduncanator

Я виправив цю відповідь відповідно до документації;)
Пол Діксон,

14
Як виявляється, це теж не правильно. OP попросив прочитати значення заголовка відповіді. Ви повинні використовувати $sent_http_my_custom_header. nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
Натан

перевірте відповідь @ dev-gosain нижче, якщо вам потрібен верхній заголовок відповіді
filimonov

14
відповідь неправильна. Той, хто запитує, намагається отримати доступ до заголовка з сервера вище . Правильна відповідь stackoverflow.com/a/30879181/111995
geekQ

50

Я стикався з тим же питанням. Я спробував і те, $http_my_custom_headerі інше, $sent_http_my_custom_headerале у мене це не спрацювало.

Хоча вирішив це питання за допомогою $upstream_http_my_custom_header.


8

Використовуйте $ http_MY_CUSTOM_HEADER

Ви можете написати щось подібне

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

6
чоловік каже - остання частина імені змінної - це ім’я поля, перетворене на нижній регістр із тире, замінене на підкреслення.
Арджун Срідхаран,

Ви врятували мій день, спасибі
МОС
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.