У меня есть веб-сервер nginx, действующий как обратный прокси-сервер для пересылки запросов на Apache для дополнительной обработки (я прошу вас не спрашивать, почему). У меня есть запрос, к которому я пытаюсь прикрепить настраиваемый заголовок, и я бы хотел, чтобы nginx пересылал этот настраиваемый заголовок вместе с Apache, чтобы я мог что-то сделать с ним в приложении.
Я ткнулся в HttpProxyModule
docs, но они не очень информативны, даже если я нахожусь в нужном месте (вполне может быть, что это не так).
Как заставить nginx пересылать X-CUSTOM-REFERRER
заголовок? Более того, если возможно, я бы хотел, чтобы он любой настраиваемый заголовок, который входит. Если последнее слишком много, чтобы просить, первого было бы достаточно для моих текущих потребностей.
Как видите, я новичок в nginx, поэтому исправительная версия была бы полезна.
Спасибо.
ОБНОВИТЬ
Соответствующий фрагмент из моей существующей конфигурации:
location / {
proxy_pass http://preview;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Custom-Referrer $x_custom_referrer;
}
В proxy_set_header
директива от HttpProxyModule позволяет вам это делать. Например:
proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;
Модуль ngx_headers_more позволяет изменять и добавлять заголовки http.
Вы можете использовать заголовки восходящего потока (имена которых начинаются с $ http_) и дополнительные настраиваемые заголовки. Например:
add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01 txt01;
Затем перейдите в консоль и сделайте запрос с заголовком пользователя:
curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/
ответ содержит X-Hdr-01, установленный сервером, и X-Upstream-01, установленный клиентом:
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1
По умолчанию nginx перенаправляет все ( proxy_pass_request_headers на;) заголовок для внутреннего сервера. Но если заголовок вашего запроса (может быть настраиваемым заголовком) включает подчеркивание (_) в имени заголовка, тогда nginx блокирует эти заголовки.
Ex: authenticate_type, cdn_enable.
Чтобы Nginx мог передавать весь или настраиваемый запрошенный заголовок в бэкэнд, включите параметр подчеркивания.
underscores_in_headers on;