Як nginx переслати заголовок HTTP_X_FORWARDED_PROTO?


18

Я чекаю своєї установки

nginx > apache/php

до

haproxy > nginx > apache/php

(використовуючи haproxy 1.5-dev18 з підтримкою ssl, зібраною у)

І nginx, і haproxy правильно налаштовані для встановлення заголовка HTTP_X_FORWARDED_PROTO. Однак, коли nginx отримує ssl трафік від haproxy, він бачить з'єднання як http і встановлює заголовок як такий.

Як я можу встановити nginx для пересилання заголовка HTTP_X_FORWARDED_PROTO, якщо він існує, але в іншому випадку продовжувати його встановлювати на основі з'єднання?

Відповіді:


36

Я придумав, як це вирішити. Проблема полягала в тому, що nginx перезаписував заголовок, встановлений haproxy в цьому рядку моєї конфігурації:

proxy_set_header X-Forwarded-Proto $scheme;

Я виправив це, додавши в це:

map $http_x_forwarded_proto $thescheme {
     default $scheme;
     https https;
 }   

та змінення рядка proxy_set_header для використання нової схеми:

proxy_set_header X-Forwarded-Proto $thescheme;

Якщо я чогось не пропускаю, у вас до і після proxy_set_headerрядків рядки однакові.
Вільфред Х'юз

1
$schemeпроти $thescheme.
Арлен Бейлер

Хіба це не в деяких рідкісних випадках небезпечно? Якщо веб-браузер надсилає HTTP-запит на haproxy, а haproxy потім надсилає запит HTTPS до Nginx - тоді default $schemeвипадок відбудеться, встановивши $theschemeHTTPS, хоча насправді запит (на haproxy) є небезпечним для HTTP. - Щоб цього уникнути, що про: default $http_x_forwarded_proto; '' $scheme;так, якщо haproxy каже HTTP, це буде дотримано.
KajMagnus

Пропонується тут: stackoverflow.com/a/21911864/694469 (тобто default $http_x_forwarded_proto;).
KajMagnus

2

У мене була така ж потреба з AWS ELB

Ось мій рядок вирішення:

proxy_set_header        X-Forwarded-Proto $http_x_forwarded_proto;

Чи варто ставити $http_x_forwarded_protoдесь налаштування ? Що це?
Джонатан

developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… $ http_x_forwarded_proto - це реалізація
NGINX

2
Ви відповіли щойно вирішили питання, про яке я забиваю 3 дні! Кожна інша публікація на тему "Aws" навантажує балансирів із захисником https proxy_set_header X-Forwarded-Proto $scheme;, який не працює
MikeMarsian

1

Я не можу просто коментувати, тому я публікую це як відповідь: Ви можете надати нам частину або всю вашу конфігурацію nginx, щоб ми могли побачити, що з цим не так? Можливо, і ваш конфігуратор HAProxy?

Перша проблема, яку я можу придумати, - це те, що ваша HAProxy робить припинення ssl. Підводячи підсумок, для завантаження серверів, що працюють із заднім числом, може бути налаштований балансир навантажень, щоб виконати всі завдання ssl, а потім спілкуватися зі своїми серверами резервного сервера на HTTP. Як схема тут: http://blog.exceliance.fr/2012/09/10/how-to-get-ssl-with-haproxy-getting-rid-of-stunnel-stud-nginx-or-pound/

Щоб дати хорошу відповідь на своє запитання, чи можете ви перевірити, що у вашому http <> https-конфігурації немає проблем із зворотним зв'язком? Можливо, тоді ви можете перенаправити http на http, https на https, а потім змусити http перенаправляти на https.

Чи можете ви також перевірити, чи увімкнено проходження ssl у вашому конфігурації HAProxy?


Ви вирішили свою проблему?
Яннович

1
Я зрозумів це. Ваша відповідь не допомогла безпосередньо, але ця друга посилання допомогла мені розібратися із способом її вирішення. Спасибі.
Ехо каже: Відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.