Наразі у мене є 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 для перевірки стану здоров'я, необхідної для ELB ").
Я розглядаю можливість входу до коду веб-програми, а не конфігурації nginx (і для цілей цього питання припустимо, що це додаток на основі Джанго), але я не впевнений, чи буде це більше витрат, ніж if
конфігурація.