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

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

Я беру свою настройку с

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, если он существует, но в противном случае продолжить его настройку на основе соединения?

Я понял, как это решить. Проблема заключалась в том, что 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;

У меня была такая же потребность с AWS ELB

Вот моя решающая линия:

proxy_set_header        X-Forwarded-Proto $http_x_forwarded_proto;

Я не могу просто комментировать, поэтому публикую это как ответ: не могли бы вы дать нам часть или всю конфигурацию 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?