Я заметил, что в nginx по умолчанию включена функция, при которой в запрос URL без косой черты для каталога, который существует в файловой системе, автоматически добавляется косая черта через 301
перенаправить.
Например. если каталог css
существует в моем корне, затем запрашивает http://example.com/css
приведет к 301 к http://example.com/css/
.
Однако у меня есть другой сайт, где SSL разгружается балансировщиком нагрузки. В этом случае, когда я прошу https://example.com/css
, nginx выдает 301 редирект на http://example.com/css/
, несмотря на то, что HTTP_X_FORWARDED_PROTO
заголовок установлен на https
балансировщиком нагрузки.
Это ошибка nginx? Или я где-то пропустил настройку конфигурации?
Похоже, LB выполняет завершение SSL, а nginx просто получает HTTP-запрос. Nginx не изменяет ни один из получаемых HTTP-заголовков. Вы можете сделать это с помощью правил перезаписи, которые проверяют, установлен ли HTTP_X_FORWARDED_PROTO или нет, а затем соответственно перезаписывают запрос. FYI nginx не поддерживает вложенные или сложные операторы «если», поэтому вам придется прибегнуть к методу, описанному в ссылке ниже.
http://rosslawley.co.uk/2010/01/nginx-how-to-multiple-if-statements/
Nginx не ищет HTTP_X_FORWARDED_PROTO, и это не ошибка. Просто отсутствие такого функционала.
Вы должны настроить свой интерфейс для настройки заголовка местоположения в ответах, или замените его другим nginx (поскольку сам nginx является отличным балансировщиком нагрузки и SSL-терминатором).