Je rencontre des problèmes pour forcer HTTPS avec un site que je déploie via AWS Elastic Beanstalk.
Il s'agit d'une application frontale utilisant EmberJS. Je tourne en rond depuis de nombreux jours en essayant de comprendre comment rediriger le trafic http vers https. J'utilise Amazon Linux AMI sur ma machine EC2.
Je suis arrivé à la conclusion (toujours pas sûr que ce soit vrai) que ce n'est pas dans Elastic Beanstalk que je force HTTPS. J'autorise HTTP et HTTPS via mon équilibreur de charge Elastic Beanstalk, et j'essaie de rediriger sur le serveur.
C'est là que je rencontre des problèmes. Je trouve de nombreuses réponses sur les règles de réécriture sans mod_rewrite
lesquelles sont basées sur l'en- X-Forwarded-Proto
tête, mais ce fichier n'existe pas sur ma machine EC2 selon une recherche de recherche.
J'ai également essayé de créer un fichier de configuration dans le .ebextensions
répertoire, mais cela n'a pas fonctionné non plus.
La principale chose que j'essaie de faire est de diriger les utilisateurs vers https lorsqu'ils essaient de frapper l'adresse http. Tous les pointeurs ou suggestions sont très appréciés, merci!
EDIT: j'utilise Debian jessie v1.4.1 64 bits exécutant Python 3.4 (préconfiguré - Docker)
Réponses:
Je pense que vous devez spécifier quel environnement Elastic Beanstalk vous utilisez (voir: Plates-formes prises en charge ), car un environnement différent a une configuration différente.
Fondamentalement, vous devez personnaliser:
Pour le personnaliser, vous pouvez utiliser CLI ou
.ebextensions
.Vous pouvez cocher Activer HTTPS et HTTP-Redirect sur AWS Elastic Beanstalk . Il vous explique comment configurer Elastic Beanstalk Single Docker Container pour servir HTTPS et HTTP (rediriger vers HTTPS). Vous pouvez ajuster la configuration selon vos besoins.
la source
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
format.ssl_certificate /opt/ssl/default-ssl.crt;
Quand j'obtiens les informations pour le cert, ça me donne un "chemin" mais c'est juste "/"Il est également possible de le faire un peu plus facilement, sans toucher à l'équilibreur de charge, en utilisant l'en-
X-Forwarded-Proto
tête défini par ELB. Voici ce que j'ai fini par faire:la source
Elastic Beanstalk ne prend pas en charge plusieurs ports à partir d'un seul conteneur Docker, vous devez donc gérer cela au niveau du proxy comme suggéré. Cependant, votre instance EC2 n'a pas besoin de connaître votre certificat, car vous pouvez mettre fin à la connexion SSL sur l'équilibreur de charge.
Dans votre
.ebextensions
répertoire, créez une configuration pour le proxy nginx qui contient deux configurations de serveur; celui qui fait office de proxyhttp://docker
(la configuration par défaut, le port 80) et celui qui redirige vers https (j'ai choisi le port 8080)..ebextensions/01-nginx-proxy.config
:Créez une deuxième configuration pour l'équilibreur de charge EB et les groupes de sécurité qui les définissent comme suit:
.ebextensions/02-load-balancer.config
:(Remarque: n'oubliez pas de remplacer SSLCertificateId et VpcId par vos valeurs).
Tout trafic sur le port 80 de l'équilibreur de charge (HTTP) atteindra le port 8080 sur l'instance EC2, qui redirige vers HTTPS. Le trafic sur le port 443 sur l'équilibreur de charge (HTTPS) finira par être servi par le port 80 sur l'instance EC2, qui est le proxy de docker.
la source
J'utilise Terraform pour activer la redirection HTTP vers HTTPS sur ElasticBeanstalk,
Je viens d'ajouter une règle d'écoute supplémentaire
la source