В настоящее время у меня есть ELB, обслуживающий как http://www.example.org, так и https://www.example.org .
Я хотел бы настроить его так, чтобы любой запрос, указывающий на http://www.example.org, был перенаправлен на https://www.example.org .
ELB отправляет запросы https как запросы http, поэтому используя:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
не будет работать, потому что запросы к https://www.example.org по- прежнему будут отправляться на порт 80 на nginx.
Я знаю, что это можно переписать как
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Но все, что я прочитал, говорит о том, что if
следует избегать любой ценой в конфигурации nginx, и это будет для каждого отдельного запроса. Кроме того, это означает, что я должен установить специальную отдельную конфигурацию для проверки работоспособности ( как описано здесь : «… когда вы находитесь за ELB, где ELB действует как конечная точка HTTPS и отправляет только HTTP-трафик на ваш сервер, вы прервите возможность ответа HTTP 200 OK OK для проверки работоспособности, в которой нуждается ELB »
Я рассматриваю возможность ввода логина в код веб-приложения, а не в конфигурацию nginx (и для целей этого вопроса давайте предположим, что это приложение на основе Django), но я не уверен, будет ли это более затратным, чем if
конфигурация.
Ответы:
Если это работает правильно, не бойтесь этого. http://wiki.nginx.org/IfIsEvil
источник
location {}
, вserver {}
вместо этого. (Но, пожалуйста, дайте мне знать, если это не так!)Настройка NGINX
источник
HTTP:1443
. Он отклоняет,HTTP:80
потому что 301 перенаправления.Это решение использует условную логику, но, как предполагает принятый ответ, я также думаю, что это нормально. Ссылка: /programming/4833238/nginx-conf-redirect-multiple-conditions
Кроме того, это не требует открытия дополнительных портов в настройках безопасности aws для образа. Вы можете прекратить ssl в AWS LB и направить трафик https на http-порт 80 вашего экземпляра.
В этом примере проверка работоспособности LB / здоровье на порту 80, который направляет на сервер приложений, поэтому проверка работоспособности проверяет, что nginx и ваше приложение дышат.
источник
Теперь вы можете создать новый прослушиватель в настройках балансировщика нагрузки AWS, который перенаправляет HTTP-порт 80 на HTTPS-порт 443. Поэтому вам больше не нужно трогать конфигурацию nginx / apache.
источник