web-dev-qa-db-fra.com

Comment rediriger HTTP vers HTTPS sur AWS Application Load Balancer?

Notre site Web doit être conforme à la norme HIPAA, donc tout doit être chiffré. Je ne veux pas que le client reçoive un message d'erreur lorsqu'il insère "http: //mysite.com", je dois donc prendre en charge HTTP et HTTPS, et rediriger HTTP vers HTTPS. Ai-je raison?

Je l'ai fait correctement sur les serveurs Web. Donc, si je me connecte directement aux serveurs Web, HTTP est automatiquement redirigé vers HTTPS. Tout bon.

Mais les serveurs Web se trouvent derrière un équilibreur de charge d'application AWS. Je ne sais pas comment rediriger HTTP vers HTTPS sur l'ELB. Ainsi navigateurs clients peut toujours se connecter à l'ELB via HTTP.

Comment configurer HTTP => HTTPS sur un AWS Application Load Balancer?

En d'autres termes, je suis sûr que la connexion entre l'ELB et les serveurs Web est HTTPS, mais comment s'assurer que la connexion entre les navigateurs clients et l'ELB est HTTPS?

12
Silly Dude

Depuis juillet 2018 , cela est pris en charge sur les équilibreurs de charge d'application.

  • Ajoutez/modifiez votre HTTP:80 auditeur
  • Définissez l'action sur Redirect
  • protocole: https
  • port: 443
  • définissez la liste déroulante suivante sur Original Host, path, query
  • définissez la dernière liste déroulante sur 301 - Permanently moved

Image des paramètres d'un écouteur HTTP vers HTTPS sur l'équilibreur de charge d'application AWS

11
John Pope

Habituellement, ce qui se passe est que l'ELB est configuré pour recevoir https (port 443) et transmettre à l'instance EC2 (cible de l'équilibreur de charge) sur http (port 80).

Le serveur Web principal redirige ces demandes vers le port 443 sur l'équilibreur de charge, provoquant une boucle infinie de redirection (entre l'équilibreur de charge et le serveur Web principal).

Un message d'erreur courant est ERR_TOO_MANY_REDIRECTS.

La solution est de regarder le X-Forwarded-Proto, qui est le protocole vu par l'équilibreur de charge, lors de la décision de redirection.

Pour nginx, la configuration ressemblera à ceci:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

et pour Apache .htaccess quelque chose comme ceci:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

REMARQUE: Bien que l'on puisse penser qu'il serait pratique de procéder sans reconfiguration du serveur Web, au printemps 2018, il n'y a aucun moyen de résoudre ce problème en utilisant uniquement ELB, c'est-à-dire que vous devez configurer votre serveur Web pour faire ce travail.

1
sandstrom