5

Ich habe eine skalierbare EB (Elasticbeanstalk) Schienen (Puma) -Instanz bereitgestellt. Ich habe https über ACM (Amazon Certificate Manager) beantragt und auf meinen Load Balancer angewendet. HTTPS ist jetzt für meine Website aktiviert. Aber wie erzwinge ich Umleitung zu https? Ich habe eine Reihe von Online-Lösungen ausprobiert, bei denen vorgeschlagen wurde, eine Nginx-Konfiguration manuell über .exitextensions vorzunehmen und ich bin nicht sicher, wo ich das Zertifikat von ACM bekommen könnte (ich gehe davon aus, dass das mit ACM momentan nicht möglich ist?)). Wie erzwinge ich HTTPS?Erzwingen von https in elasticbeanstalk mit Zertifikat von ACM

+0

Ich folgte dieser http://msnider.github.io/blog/2013/12/06/force-https-slash-ssl-on-amazon -elastische Bohnenstange/und es hat funktioniert. Möglicherweise müssen Sie den Server manuell neu starten, damit er funktioniert. oder einfach nur hochladen und bereitstellen. Ich erinnere mich auch vage daran, meinen Load-Balancer meiner Domain zuordnen zu müssen, damit mein Cert funktioniert, aber das könnte daran liegen, dass ich ein Extended-Validierungs-Cert gekauft habe. – vath

+0

Es scheint, dass das Internet sich nicht auf eine einzige, vollständige und funktionierende Lösung für dieses Problem einigen kann. Hoffentlich können Sie Hilfe [hier in meinem Beitrag] (http://thehunk.blogspot.in/2017/11/how-to-force-redirect-http-to-https-in.html) bekommen. Ich musste durch die Reifen springen, um endlich zu kommen. – ADTC

Antwort

4

Die aktuellen AWS EB Rails und Node.js Setups sowohl Verwendung nginx (wenn Ihr Webserver Apache ist this answer sehen), so sollte folgendes (von this question angepasst) arbeiten:

Erstellen Sie die Datei .ebextensions/01-force-https.config (die .config ist wichtig, nicht .conf) mit dem folgenden Inhalt.

Wenn Ihre Umgebung eine einzelne Instanz ist:

files: 
    "/etc/nginx/conf.d/01-force-https.conf": 
    owner: root 
    group: root 
    mode: "000644" 
    content: | 
     server { 
      listen 8080; 
      return 301 https://$host$request_uri; 
     } 

Wenn Ihre Umgebung Last ausgeglichen ist, man kann leider nicht einfach auf die vorhandene Konfiguration hinzuzufügen, aber müssen es mit sed ändern:

files: 
    "/tmp/45_nginx_https_rw.sh": 
    owner: root 
    group: root 
    mode: "000644" 
    content: | 
     #! /bin/bash 

     CONFIGURED=`grep -c "return 301 https" /opt/elasticbeanstalk/support/conf/webapp_healthd.conf` 

     if [ $CONFIGURED = 0 ] 
     then 
      sed -i '/listen 80;/a \ if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /opt/elasticbeanstalk/support/conf/webapp_healthd.conf 
      logger -t nginx_rw "https rewrite rules added" 
      exit 0 
     else 
      logger -t nginx_rw "https rewrite rules already set" 
      exit 0 
     fi 

container_commands: 
    00_appdeploy_rewrite_hook: 
    command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/appdeploy/enact 
    01_configdeploy_rewrite_hook: 
    command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact 
    02_rewrite_hook_perms: 
    command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh 
    03_rewrite_hook_ownership: 
    command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh 

Dann füge es zu deinem Git Repo oder App Bundle und eb deploy hinzu. Dies erzeugt /etc/nginx/conf.d/01-force-https.conf, die automatisch von /etc/nginx/nginx.conf aufgenommen wird. Beachten Sie, dass eb deploy die Datei auf dem Server nicht löscht, wenn Sie später die entsprechende Datei aus .ebextensions entfernen. Auch ich fand die folgenden hilfreich bei der Fehlersuche durch eb ssh:

sudo service nginx configtest 
sudo service nginx restart 
+0

Danke! Gute Antwort – thomasstephn