Как устранить ошибки 502 Bad Gateway с помощью Elastic Load Balancer и EC2 / Nginx для запросов HTTPS? - PullRequest
0 голосов
/ 01 мая 2018

Я сталкиваюсь с проблемами «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-запрос всё ещё зашифрован? Или какая-то проблема с кодировкой?

It looks like this

А вот 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;

        }
    }
}

1 Ответ

0 голосов
/ 01 мая 2018

Хорошо, я понял это (я дурачок). У меня было два слушателя, настроенных на ELB, один для 80 и один для 443, что было правильно. Приемник для 80 был правильно настроен для перенаправления на внутренний сервер (Nginx) 80 через HTTP, как и ожидалось. Приемник 443 был НЕПРАВИЛЬНО настроен для отправки на порт 80 на серверной стороне по протоколу HTTPS. Я обновил прослушиватель 443, чтобы он использовал то же правило, что и прослушиватель 80 (то есть прослушивал 443, но отправлял в сервер 80 через HTTP), и это работало. Не обращай внимания на всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...