Как добавить заголовок ответа на nginx при использовании прокси-сервера проходит?


Я хочу добавить пользовательский заголовок для ответа, полученного от сервера за nginx.

пока add_header работает для nginx-обработанных ответов, он ничего не делает, когда есть.

4 60

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;