Вперед Пользовательский Заголовок от Обратного Прокси Nginx


25

У меня есть веб-сервер nginx, действующий в качестве обратного прокси-сервера для пересылки запросов в Apache для дополнительной обработки (прошу не спрашивать, почему). У меня есть запрос, к которому я пытаюсь прикрепить пользовательский заголовок, и я бы хотел, чтобы nginx перенаправил этот пользовательский заголовок в Apache, чтобы я мог что-то сделать с ним в приложении.

Я пролистал HttpProxyModuleдокументы, но они не очень описательны, даже если я нахожусь в нужном месте (вполне возможно, что я не так).

Как я могу получить 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;
}

Ответы:


20

proxy_set_headerДиректива от HttpProxyModule позволяет сделать это. Например:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;

1
Спасибо, @mgorven. Однако входящее значение является переменным. Могу ли я прочитать значение из входящего X-Custom-Referrerзаголовка и передать его? proxy_set_header X-Custom-Referrer $x_custom_referrerИли что-то в этом роде?
Роб Уилкерсон

1
Да, вы можете использовать $http_x_custom_referrer. Однако все заголовки, отправляемые клиентом, должны автоматически передаваться бэкэнду. Вы proxy_pass_request_headers offгде-нибудь сидели?
Mgorven

Не то, чтобы я мог видеть. Я обновил свой вопрос фрагментом из моего конфигурационного файла. Этот заголовок определенно не попадает в приложение. Тем не менее, я вроде в предположении , что исходные приложения посылают его, так что я буду делать свою должную осмотрительность и быть уверен, что должно быть по умолчанию.
Роб Уилкерсон

@RobWilkerson в вашем фрагменте proxy_set_headerзакомментировано соответствующее; также вы используете $x_custom_referrerвместо $http_x_custom_referrer...
Северин

Я думаю, что ответ @ mgorven должен быть обновлен, чтобы $http_<custom_header_field>вместо$proxy_add_<custom_header_field>
Tri Nguyen

2

Модуль ngx_headers_more позволяет изменять и добавлять заголовки http.


Этот модуль добавляет заголовки к ответу. Это не то, о чем просит ОП. Им нужно отправить дополнительный заголовок в восходящий поток, в proxy_pass.
Виктор Шредер

1

Вы можете использовать вышестоящие заголовки (которые начинаются с $ 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

1
Это установка заголовков в ответе. OP хочет установить заголовки, которые будут отправлены в верхний proxy_passпоток директивы.
Виктор Шредер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.