web-dev-qa-db-fra.com

Comment résoudre les erreurs 502 Bad Gateway avec Elastic Load Balancer et EC2 / Nginx pour les requêtes HTTPS?

Je rencontre des problèmes '502 Bad Gateway' pour les requêtes HTTPS lorsque j'utilise AWS Elastic Load Balancer (type d'application) devant des instances EC2 exécutant Nginx. Nginx agit en tant que proxy inverse sur chaque instance d'un serveur de serveuse servant une application python (structure Pyramid). J'essaie d'utiliser la terminaison TLS sur l'ELB pour que les instances EC2 soient traitant uniquement de HTTP. Voici la configuration approximative:

Demande HTTPS client> ELB (écoute sur 443, redirection vers 80 sur backend)> Nginx écoute sur port 80 (sur instance Ec2)> redirigé vers serveuse/Pyramid (sur même instance ec2)

Lorsque je fais des demandes sur HTTPS, j'obtiens l'erreur 502. Cependant, lorsque je fais des requêtes HTTP régulières, j'obtiens une réponse comme prévu (même configuration que ci-dessus sauf que ELB écoute sur le port 80).

Quelques informations supplémentaires: les contrôles de santé ELB fonctionnent. Tous les groupes VPC/sécurité sont configurés correctement (je crois). J'utilise un certificat AWS sur l'ELB en utilisant la configuration/procédure standard sur AWS. J'ai SSH dans l'instance Ec2 et dans le journal d'accès Nginx, il semble que la demande HTTPS soit toujours cryptée? Ou un problème d'encodage?

It looks like this

Et voici nginx.conf sur l'instance 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;

        }
    }
}
10
Luke

Ok je l'ai compris (je suis un mannequin). J'avais deux auditeurs installés sur l'ELB, un pour 80 et un pour 443, ce qui était correct. L'écouteur pour 80 a été correctement configuré pour transférer vers le port backend (Nginx) 80 sur HTTP comme prévu. L'écouteur 443 a été INCORRECTEMENT configuré pour envoyer au port 80 sur le backend via HTTPS. J'ai mis à jour l'auditeur 443 pour utiliser la même règle que l'écouteur 80 (c'est-à-dire écouter sur 443 mais envoyer au backend 80 via HTTP) et cela a fonctionné. Ignorez-vous tous.

12
Luke