В настоящее время у меня есть 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
конфигурация.