Ich habe Probleme beim Erzwingen von HTTPS mit einer Site, die ich über AWS Elastic Beanstalk bereitstelle.
Es ist eine Frontend-Anwendung mit EmberJS. Ich bin seit vielen Tagen im Kreis herumgegangen und habe versucht, herauszufinden, wie man http-Verkehr zu https umleitet. Ich verwende Amazon Linux AMI auf meinem EC2-Computer.
Ich bin zu dem Schluss gekommen (immer noch nicht sicher, ob dies richtig ist), dass es nicht innerhalb von Elastic Beanstalk liegt, dass ich HTTPS erzwinge. Ich erlaube HTTP und HTTPS über meinen Elastic Beanstalk Load Balancer und versuche, auf dem Server eine Umleitung durchzuführen.
Hier stoße ich auf Probleme. Ich finde viele Antworten zu Umschreiberegeln, mod_rewrite
die nicht auf dem X-Forwarded-Proto
Header basieren , aber diese Datei existiert laut einer Suchabfrage nicht auf meinem EC2-Computer.
Ich habe auch versucht, eine Konfigurationsdatei im .ebextensions
Verzeichnis zu erstellen , aber das hat auch nicht funktioniert.
Das Wichtigste, was ich versuche, ist, dass Benutzer zu https geleitet werden, wenn sie versuchen, die http-Adresse zu erreichen. Alle Hinweise oder Vorschläge sind sehr dankbar, danke!
BEARBEITEN: Ich verwende 64-Bit-Debian-Jessie v1.4.1, auf dem Python 3.4 (vorkonfiguriert - Docker) ausgeführt wird.
quelle
Antworten:
Ich denke, Sie müssen angeben, welche Elastic Beanstalk-Umgebung Sie verwenden (siehe: Unterstützte Plattformen ), da unterschiedliche Umgebungen unterschiedliche Konfigurationen haben.
Grundsätzlich müssen Sie Folgendes anpassen:
Zum Anpassen können Sie CLI oder verwenden
.ebextensions
.Sie können HTTPS und HTTP-Redirect in AWS Elastic Beanstalk aktivieren . Hier erfahren Sie, wie Sie Elastic Beanstalk Single Docker Container für HTTPS und HTTP konfigurieren (Weiterleitung an HTTPS). Sie können die Konfiguration nach Bedarf anpassen.
quelle
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
Format abrufen.ssl_certificate /opt/ssl/default-ssl.crt;
Wenn ich die Informationen für das Zertifikat erhalte, erhalte ich einen "Pfad", aber es ist nur "/"Dies ist auch etwas einfacher möglich, ohne den Load Balancer zu berühren, indem der
X-Forwarded-Proto
von ELB festgelegte Header verwendet wird. Folgendes habe ich letztendlich getan:quelle
Elastic Beanstalk unterstützt nicht mehrere Ports von einem einzelnen Docker-Container, daher müssen Sie dies wie empfohlen auf Proxy-Ebene tun. Ihre EC2-Instanz muss jedoch nichts über Ihr Zertifikat wissen, da Sie die SSL-Verbindung am Load Balancer beenden können.
.ebextensions
Erstellen Sie in Ihrem Verzeichnis eine Konfiguration für den Nginx-Proxy, die zwei Serverkonfigurationen enthält. einer, der Proxyshttp://docker
(die Standardkonfiguration, Port 80) und einer, der zu https umleitet (ich habe Port 8080 gewählt)..ebextensions/01-nginx-proxy.config
:Erstellen Sie eine zweite Konfiguration für den EB-Load-Balancer und die Sicherheitsgruppen, die diese wie folgt einrichten:
.ebextensions/02-load-balancer.config
:(Hinweis: Vergessen Sie nicht, SSLCertificateId und VpcId durch Ihre Werte zu ersetzen.)
Jeglicher Datenverkehr auf Port 80 des Lastenausgleichs (HTTP) trifft auf Port 8080 der EC2-Instanz, die zu HTTPS umleitet. Der Datenverkehr auf Port 443 des Load Balancer (HTTPS) wird über Port 80 der EC2-Instanz, dem Docker-Proxy, bedient.
quelle
Ich verwende Terraform, um die HTTP-zu-HTTPS-Umleitung auf ElasticBeanstalk zu aktivieren.
Ich habe gerade eine zusätzliche Listener-Regel hinzugefügt
quelle