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 ниже, если вам нужен заголовок ответа
апстрима
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
Человек говорит: последняя часть имени переменной - это имя поля, преобразованное в нижний регистр с заменой дефисов на символы подчеркивания.
Арджун Сридхаран
Вы спасли мне день, спасибо
мес