Переслати спеціальний заголовок від зворотного проксі 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...
severin

Думаю, відповідь @ 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
Це налаштування заголовків на відповідь. ОП хоче встановити заголовки, що надсилатимуться вгору за proxy_passдирективою.
Віктор Шредер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.