Comment rediriger HTTP vers HTTPS sur AWS Application Load Balancer?

12

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, les navigateurs clients peuvent toujours se connecter à l'ELB via HTTP.

Comment configurer HTTP => HTTPS sur un équilibreur de charge d'application AWS?

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?

Mec idiot
la source
Vous ne le faites pas sur le LB. Vous le faites sur les instances, en fonction de l'en- X-Forwarded-Prototête que le LB envoie.
ceejayoz le
Je ne suis pas un serveur - je suis un programmeur C #, alors veuillez m'excuser d'être stupide - J'ai utilisé le module de réécriture d'URL pour configurer la redirection sur le serveur Windows. Cela fonctionne si je me connecte directement au serveur. Mais si je me connecte à l'ELB, je peux toujours me connecter avec HTTP. Pourquoi?
Silly Dude
L'ALB écoute-t-il le 443 avec un certificat SSL dessus? Pour être sûr dans votre question, vous voulez également du SSL entre l'ALB et les serveurs?
strongjz

Réponses:

-4

Vous pouvez ajouter la configuration ci-dessous à votre fichier .htaccess. Mais avant cela, assurez-vous que mod_rewrite est activé sur le serveur et que le fichier .htaccess n'est pas refusé.

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

Pour des explications détaillées, veuillez consulter la documentation officielle de aws end. https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

imvikasmunjal
la source
7
Cette réponse semble impliquer le serveur HTTP Apache
Paul Draper
2
OP vous demande comment configurer l'ELB afin d'expliquer comment configurer Apache? Ils ont explicitement déclaré avoir déjà configuré Apache pour effectuer la redirection. Veuillez supprimer votre réponse.
Cerin
11

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

  • Ajouter / modifier votre HTTP:80écouteur
  • 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

John Pope
la source
1

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 consiste à examiner le X-Forwarded-Proto, qui est le protocole tel que 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 gérer cela 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 que cela fonctionne.

sandstrom
la source