У меня возникают проблемы «502 Bad Gateway» для запросов HTTPS при использовании AWS Elastic Load Balancer (тип приложения) перед экземплярами EC2, на которых запущен Nginx. Nginx действует как обратный прокси-сервер на каждом экземпляре для сервера официантки, обслуживающего приложение Python (структура Pyramid). Я пытаюсь использовать завершение TLS в ELB, чтобы экземпляры EC2 имели дело только с HTTP. Вот примерная установка:
Клиентский HTTPS-запрос> ELB (прослушивание 443, перенаправление на 80 на бэкэнде)> Nginx прослушивает порт 80 (в экземпляре Ec2)> перенаправляется официантке / пирамиде (в том же экземпляре ec2)
Когда я делаю запросы по HTTPS, я получаю ошибку 502. Однако, когда я делаю обычные HTTP-запросы, я получаю ожидаемый ответ (та же настройка, что и выше, за исключением того, что ELB прослушивает порт 80).
Дополнительная информация: Проверки работоспособности ELB работают. Все группы VPC / Security настроены правильно (я считаю). Я использую сертификат AWS на ELB, используя стандартную установку / пошаговое руководство на AWS. Я подключился по SSH к экземпляру Ec2, и в журнале доступа Nginx похоже, что запрос HTTPS все еще зашифрован? Или какая-то проблема с кодировкой?
А вот nginx.conf на экземпляре EC2:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /etc/nginx/access.log;
sendfile on;
# Configuration containing list of application servers
upstream app_servers {
server 127.0.0.1:6543;
}
server {
listen 80;
server_name [MY-EC2-SERVER-NAME];
# Proxy connections to the application servers
# app_servers
location / {
proxy_pass http://app_servers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
Хорошо, я разобрался (я болван). У меня было два слушателя, настроенных на ELB, один для 80 и один для 443, и это было правильно. Слушатель для 80 был правильно настроен для перенаправления на серверный порт (Nginx) 80 через HTTP, как и ожидалось. Прослушиватель 443 НЕПРАВИЛЬНО настроен для отправки на порт 80 серверной части по HTTPS. Я обновил прослушиватель 443, чтобы использовать то же правило, что и прослушиватель 80 (то есть прослушивать 443, но отправлять на бэкэнд 80 по HTTP), и это сработало. Не обращайте внимания на вас всех.
Спасибо! Это очень сбивает с толку - нам нужно установить целевая группа для прослушивания 443 с использованием HTTP.