Как добавить заголовок ответа на nginx при использовании прокси-сервера проходит?
Я хочу добавить пользовательский заголовок для ответа, полученного от сервера за nginx.
пока add_header
работает для nginx-обработанных ответов, он ничего не делает, когда есть.
4 ответа:
есть модуль под названием HttpHeadersMoreModule что дает вам больше контроля над заголовками. Он не поставляется с Nginx и требует дополнительной установки. С его помощью вы можете сделать что-то вроде этого:
location ... { more_set_headers "Server: my_server"; }
это будет "установить выходной заголовок сервера в пользовательское значение для любого кода состояния и любого типа контента". Он заменит уже установленные заголовки или добавит их, если они не установлены.
add_header
работает сproxy_pass
как без. Я только сегодня настроил конфигурацию, где я использовал именно эту директиву. Однако я должен признать, что я тоже боролся с этим, не вспоминая точно причину.сейчас у меня есть рабочая конфигурация, и она содержит следующее (среди прочих):
server { server_name .myserver.com location / { proxy_pass http://mybackend; add_header X-Upstream $upstream_addr; } }
перед nginx
1.7.5
add_header работала только на успешные ответы, в отличие от HttpHeadersMoreModule указано как Себастьян Гудман в своем ответе.С nginx и
1.7.5
вы можете использовать ключевое словоalways
для включения пользовательских заголовков даже в ответах на ошибки. Например:add_header X-Upstream $upstream_addr always;
ограничения: вы не можете переопределить
server
значение заголовка с помощьюadd_header
.
как Оливер пишет:
add_header
работает сproxy_pass
как без.однако, как пишет Шейн, начиная с Nginx 1.7.5, вы должны пройти
always
для полученияadd_header
для работы с ответами на ошибки, например:add_header X-Upstream $upstream_addr always;
вы можете попробовать это решение:
в своем
location
блок при использованииproxy_pass
сделать что-то вроде этого:location ... { add_header yourHeaderName yourValue; proxy_pass xxxx://xxx_my_proxy_addr_xxx; # Now use this solution: proxy_ignore_headers yourHeaderName // but set by proxy # Or if above didn't work maybe this: proxy_hide_header yourHeaderName // but set by proxy }
Я не уверен, что это будет именно то, что вам нужно, но попробуйте некоторые манипуляции с этим методом и, возможно, результат будет соответствовать вашей проблеме.
также вы можете использовать эту комбинацию:
proxy_hide_header headerSetByProxy; set $sent_http_header_set_by_proxy yourValue;