Назад | Перейти на главную страницу

Переслать настраиваемый заголовок с обратного прокси Nginx

У меня есть веб-сервер 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;