Я использую балансировщик нагрузки Rackspace, который позволяет мне настроить мой ssl ключ / pem внутри панели администратора. Все отлично работает, я могу использовать протоколы http и https. Но если я попытаюсь перенаправить http на https с помощью:
server{
listen *:80;
server_name mydomain.com www.mydomain.com;
rewrite ^ https://mydomain.com$request_uri? permanent;
... Я получаю петлю перенаправления. Я понимаю, что не слушаю порт 443, но это потому, что балансировщик нагрузки справился с этим для меня. Я также попытался обернуть переписать if ($scheme ~* http){
безрезультатно.
Другая часть моего вопроса заключается в том, что я хотел бы удалить www из URL, могу ли я сделать это с помощью одной перезаписи? Разве вышесказанное не должно заботиться об этом?
Спасибо за вашу помощь!
nginx
load-balancing
jwerre
источник
источник
Ответы:
sciurus верен в том, что облачные балансировщики нагрузки Rackspace устанавливают X-Forwarded-Proto на https, когда SSL выгружается на балансировщик нагрузки. Чтобы избежать цикла перенаправления в nginx, вы должны добавить следующее в
location
раздел конфигурации vhost:Это должно исключить бесконечный цикл перенаправления при перенаправлении не-https запросов в https.
источник
При использовании Nginx построены в переменном сервере
$request_uri
и$server_name
вы можете сделать это без использования регулярных выражений вообще. Добавьте следующее вlocation
блок вашего сервера, и все готово:Это предполагает, что ваш балансировщик нагрузки отправляет
$http_x_forwarded_proto
заголовок вместе с запросом к вашему бэкэнд-экземпляру. Другие общие заголовки включают в себя$http_x_forwarded_scheme
и просто$scheme
.Дополнительную информацию можно найти в документации по nginx Pitfalls и Common Mistakes : https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites.
источник
$host
вместо$server_name
Балансировщик нагрузки всегда общается с вами по http. Что происходит
Шаги 2-4 повторяются до тех пор, пока браузер не обнаружит петлю перенаправления и не сдастся.
РЕДАКТИРОВАТЬ: Чтобы решить эту проблему, выполнять перезапись, только если заголовок X-Forwarded-Proto установлен на http. Этот заголовок показывает, как балансировщик нагрузки Rackspace сообщает вашему веб-серверу протокол, по которому он получил запрос.
источник