it-swarm.com.de

Wie erzwinge ich https auf elastische Bohnenstange?

Ich kann anscheinend keine https für die kostenlose Nutzungsstufe von elastischen Bohnenstange erzwingen.

Ich habe den folgenden Vorschlag ausprobiert: So erzwingen Sie https bei Amazon-Gummibohnenstiel, ohne die Gesundheitsprüfung zu unterbrechen

Verwenden dieser Apache-Umschreibungsregel

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/status$ 
RewriteCond %{REQUEST_URI} !^/version$ 
RewriteCond %{REQUEST_URI} !^/_hostmanager/ 
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Wenn ich das versuche, werden http-Anforderungen nicht wie gewünscht auf https umgeleitet. Stattdessen wird die http-Seite normal geladen. Ich habe auch versucht, den X-Forwarded-Port-Header mit dem gleichen Ergebnis zu verwenden. 

Ich habe auch die folgende Umschreibungsregel ausprobiert

RewriteCond %{SERVER_PORT} 80
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Und diese Regel verursacht eine Umleitungsschleife. Es scheint also so, als würden die Apache-Umschreiberegeln die Header X-Forwarded-Port und X-Forwarded-Proto der Elastic Load Balancer nicht verwenden, aber auch eine Weiterleitungsschleife ist für mich nicht das Richtige.

Bitte helfen Ich bin neu in AWS, Elastic Beanstalk und mit den Apache-Regeln nicht sehr vertraut. Ich weiß nicht genau, wohin ich gehen soll. Vielen Dank.

66
landland

Bei dieser Antwort wird davon ausgegangen, dass Sie bereits https in der Lastverteilungsgruppe aktiviert haben, das SSL-Zertifikat zum Lastverteiler hinzugefügt, 443 zu den vom Lastverteiler weitergeleiteten Ports hinzugefügt und Ihren Domänennamen auf die Elastic Beanstalk-Umgebung mit Route 53 (oder gleichwertiger DNS-Dienst).

HINWEIS: Diese Antwort gilt für elastische Beanstalk-Umgebungen, in denen Apache verwendet wird. Es funktioniert möglicherweise auch nicht für eine Docker-basierte Bereitstellung.

Alles, was Sie tun müssen, ist, einer Ihrer .config-Dateien im .ebextensions-Verzeichnis Ihres Projekts Folgendes hinzuzufügen:

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            RewriteEngine On
            <If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
            RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
            </If>

Erläuterung

Dies ist außerhalb von Elastic Beanstalk mäßig gerade. Normalerweise fügt man eine Apache-Umschreibregel wie folgt hinzu:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

Oder, wenn Sie sich hinter einem Lastausgleicher befinden, wie wir in diesem Fall sind:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]

Diese Konfigurationen funktionieren jedoch nur innerhalb eines <VirtualHost>-Blocks. Wenn Sie RewriteCond in einen <If>-Block ändern, kann er außerhalb eines <VirtualHost>-Blocks ordnungsgemäß arbeiten, sodass wir eine eigenständige Apache-Konfigurationsdatei einfügen können. Beachten Sie, dass das Standard-Apache-Setup auf CentOS (einschließlich des Setups auf ElasticBeanstalk) alle Dateien enthält, die mit /etc/httpd/conf.d/*.conf übereinstimmen und dem Dateipfad entsprechen, in dem wir diese Datei speichern.

Der -n '%{HTTP:X-Forwarded-Proto}'-Teil der Bedingung verhindert, dass er umgeleitet wird, wenn Sie sich nicht hinter einem Load Balancer befinden. Dies ermöglicht Ihnen die gemeinsame Konfiguration einer Produktionsumgebung mit einem Load Balancer und https und einer Staging-Umgebung, die eine Einzelinstanz und kein https hat. Dies ist nicht erforderlich, wenn Sie in allen Umgebungen Lastverteiler und https verwenden, aber es schadet nicht, dass dies der Fall ist.

Schlechte Lösungen habe ich gesehen

Ich habe viele schlechte Lösungen für dieses Problem gesehen, und es lohnt sich, sie durchzugehen, um zu verstehen, warum diese Lösung notwendig ist.

  1. Use Cloudfront: Einige Leute empfehlen die Verwendung eines nicht zwischengespeicherten Cloudfront-Setups vor Elastic Beanstalk, um die HTTP-zu-HTTPS-Weiterleitung durchzuführen. Dies fügt einen völlig neuen Dienst hinzu (wodurch Komplexität hinzugefügt wird), der nicht genau angemessen ist (Cloudfront ist ein CDN; es ist nicht das richtige Werkzeug, um HTTPS für inhärent dynamische Inhalte zu erzwingen). Apache config ist die normale Lösung für dieses Problem und Elastic Beanstalk verwendet Apache, daher sollten wir dies tun.

  2. SSH in den Server und ...: Dies ist völlig im Gegensatz zu Elastic Beanstalk und hat so viele Probleme. Neue Instanzen, die durch automatisches Skalieren erstellt wurden, haben keine geänderte Konfiguration. In geklonten Umgebungen ist die Konfiguration nicht verfügbar. Bei einer beliebigen Anzahl von Umgebungsänderungen wird die Konfiguration gelöscht. Das ist eine so schlechte Idee.

  3. Überschreiben Sie die Apache-Konfigurationsdatei mit einer neuen Datei: Dies kommt in den richtigen Bereich der Lösung, lässt Sie jedoch einen Wartungs-Albtraum, wenn Elastic Beanstalk Aspekte des Server-Setups ändert (was sehr wahrscheinlich der Fall ist). Siehe auch die Probleme im nächsten Punkt.

  4. Bearbeiten Sie die Apache-Konfigurationsdatei dynamisch, um ein paar Zeilen hinzuzufügen: Dies ist eine gute Idee. Das Problem dabei ist, dass es nicht funktioniert, wenn Elastic Beanstalk den Namen ihrer Standard-Apache-Konfigurationsdatei ändert, und dass diese Datei überschrieben werden kann, wenn Sie am wenigsten erwarten: https://forums.aws.Amazon.com /thread.jspa?threadID=163369

153
Zags

EDIT: Ich liebe diese Antwort, aber jetzt ist sehr alt. AWS hat neue Dienste (wie Certificate Manager ) entwickelt, die einen Teil dieser Antwort überflüssig machen. Darüber hinaus ist die Verwendung des Ordners .ebextensions mit Apache eine sauberere Methode, um diese Weiterleitung wie oben beschrieben auszuführen.

Wenn Sie Ihre Website auf S3 hosten, können Teile dieser Antwort für Sie dennoch nützlich sein.


Das hat für mich funktioniert:

  1. Laden Sie das Zertifikat mit dem Befehl aws console in AWS hoch. Die Befehlsstruktur ist:

    aws iam upload-server-certificate --server-certificate-name CERTIFICATE_NAME --certificate-body "file://PATH_TO_CERTIFICATE.crt" --private-key "file://YOUR_PRIVATE_KEY.pem" --certificate-chain "file://YOUR_CERTIFICATE_CHAIN.ca-bundle" --path /cloudfront/
    
  2. Gehen Sie in Ihrer Elastic Beanstalk-Anwendung zu Konfiguration -> Netzwerkebene -> Lastverteilung und klicken Sie auf das Zahnradsymbol.

  3. Wählen Sie Sicherer Listener-Port als 443 aus. Wählen Sie Protokoll als HTTPS aus. Wählen Sie CERTIFICATE_NAME aus Schritt 2 für SSL-Zertifikat-ID aus. Speichern Sie die Konfiguration.

  4. Gehen Sie zu Ihrem Console. Klicken Sie auf EC2-Instanzen. Klicken Sie auf Load Balancer. Klicken Sie sich durch die Lastverteiler. Klicken Sie auf Instances und scrollen Sie nach unten, um die dem Load Balancer zugewiesenen EC2-Instanzen anzuzeigen. Wenn die EC2-Instanz denselben Namen wie Ihre Anwendungs-URL hat (oder etwas anderes in der Nähe), beachten Sie den DNS-Namen für den Lastenausgleich. Es sollte das Format awseb-e-... haben

  5. Gehen Sie zurück zu Ihrem Console. Klicken Sie auf CloudFront. Klicken Sie auf Create Distribution. Wählen Sie eine Web -Distribution aus.

  6. Richten Sie die Verteilung ein. Stellen Sie Ihren Origin-Domänennamen auf den DNS-Namen des Lastausgleichsgeräts ein, den Sie in Schritt 5gefunden haben. Setzen Sie Viewer-Protokollrichtlinie auf HTTP auf HTTPS umleiten. Setzen Sie Abfragezeichenfolgen weiterleiten auf Ja. Setzen Sie Alternate Domain Names (CNAMEs) auf die URL (s), die Sie für Ihre Anwendung verwenden möchten. Setzen Sie SSL-Zertifikat auf den in Schritt 2 hochgeladenen CERTIFICATE_NAME. Erstellen Sie Ihre Distribution.

  7. Klicken Sie in CloudFront auf Ihren Distributionsnamen. Klicken Sie auf Ursprünge, wählen Sie Ihren Ursprung aus und klicken Sie auf Bearbeiten. Stellen Sie sicher, dass Origin Protocol PolicyMatch Viewer ist. Geh zurück. Klicken Sie auf Verhalten, wählen Sie Ihren Ursprung aus und klicken Sie auf Bearbeiten. Ändern Sie Header weiterleiten in Whitelist und fügen Sie Host hinzu. Sparen.

Hinweis:Ich habe auch eine längere Anleitung geschrieben .

15
Adam Link

Die am meisten aufgerufenen funktionieren für mich nicht. Die <If> -Direktive funktioniert nur mit Apache 2.4+, aber ElasticBeanstalk hat die Version 2.2.x.

Befolgen Sie also die gleichen Ratschläge wie oben. Erstellen Sie eine Datei mit dem Namen .ebextensions/https_rewrite.config mit folgendem Inhalt

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            LoadModule rewrite_module modules/mod_rewrite.so
            RewriteEngine On
            # This will enable the Rewrite capabilities
            RewriteCond %{HTTPS} !=on
            # This checks to make sure the connection is not already HTTPS
            RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Das scheint für mich zu funktionieren.

Informationen zum Einrichten dieser Datei in Ihre WAR-Datei finden Sie unter answer

6
Marc

Ich versuche im Jahr 2018, eine elastische Bohnenstange mit Loadbalancer umzuleiten. Keine der oben genannten Antworten funktioniert in meiner Umgebung. Mehrere Probleme, die ich kennengelernt habe:

  1. Ich habe die am meisten gewählte Antwort versucht, aber mein Tomcat ist Version 2.7. Es unterstützt nicht.

  2. Ich habe container_commands verwendet und die Einstellung 00_applications kopiert. AWS ignoriert es einfach.

Also habe ich es endlich zum Laufen gebracht: https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/Java-Tomcat-proxy.html

Folgendes mache ich:

Ich habe die Ordnerstruktur neu erstellt:

.ebextensions 
 - httpd
  -conf.d
   -ssl.conf

Und dann ist das der Inhalt von ssl.conf

<VirtualHost *:80>
  RewriteEngine on
  RewriteCond %{HTTP:X-Forwarded-Proto} =http
  RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
  <Proxy *>
    Order Allow,Deny
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>

Hoffe das wird helfen.

4
sliks

Edit: Zags Lösung ist allgemeiner und korrekter. Ich empfehle es über meinen (was spezifisch für eine Python-Umgebung ist)

Hier ist eine saubere und schnelle Lösung, mit der ich vorhatte, wsgi.conf zu hacken oder CloudFront zu verwenden

In Ihrer .ebextensions/some_file.config:

# Redirect HTTP to HTTPS
  "/etc/httpd/conf.d/https_redirect.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      <Directory /opt/python/current/app/>
      RewriteEngine on
      RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
      RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
      </Directory>

Ich finde, das ist zu einfach, scheint aber gut zu funktionieren.

Beachten Sie auch, dass ich explizit HTTP umwandle statt "nicht HTTPS".

4
Ian

Keine der obigen Antworten funktionierte für mich, aber einige halfen mir dabei, die Antwort herauszufinden, die für mich funktionierte. Außerdem fand ich die unten stehende URL, die geholfen hat http://docs.aws.Amazon.com/elasticbeanstalk /latest/dg/Java-Tomcat-platform.html

Ich habe die in der obigen URL erwähnte Dateistruktur erstellt, um 2 Dateien zu ändern Httpd.conf 00_application.conf

kopieren Sie die gesamte httpd.conf aus Ihrer Instanz und fügen Sie sie unter .ebextention in den Code unter der Ordnerstruktur ein, die im obigen Link angegeben ist. Fügen Sie der Datei in Ihrem Projekt dann einfach eine Zeile hinzu

LoadModule rewrite_module modules/mod_rewrite.so

Machen Sie dasselbe für 00_application.conf, kopieren Sie es aus Ihrer Instanz und platzieren Sie es in Ihrer Codebase unter .ebextention unter httpd/conf.d/elasticbeanstalk/00_application.conf

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Stellen Sie jetzt Ihren Code bereitEs sollte funktionieren.

3
A Paul

Mit dem nächsten Befehl funktioniert es für mich:

RewriteCond %{HTTP:X-Forwarded-Port} !=443

und ohne die https-Prüfung:

RewriteCond %{HTTP:X-Forwarded-Proto} !https

Es sieht so aus, als würde ELB den Wert von X-Forwarded-Proto in http ändern (sogar bei TCP Protokoll).

3
Roy Shmuli

Es fiel mir schwer, das herauszufinden, und nachdem ich eine Lösung gefunden hatte, schrieb ich schrieb eine ausführliche Erklärung meiner Lösung um hoffentlich jemand anderem zu helfen. Dies gilt speziell für die Tomcat 8-, Apache2- und Spring Boot-App. Es gibt wirklich nützliche Erweiterungsbeispiele im AWS Labs Github .

Zusammenfassung dessen, was bei mir funktioniert hat:

  1. Erstellen Sie eine Datei unter /src/main/webapp/.ebextensions/httpd/conf.d/elasticbeanstalk.conf
  2. Fügen Sie Umschreibungsbedingungen/-regeln hinzu, und achten Sie dabei darauf, "LoadModule rewrite_module modules/mod_rewrite.so" einzuschließen.
  3. Bereitstellung in AWS EBS

Hier ist ein Beispiel Spring Boot App .

2
yerself

Bei Elastic Beanstalk können Sie einfach Ihre On-Konfiguration hinzufügen, sodass AWS deren Einstellungen überschreibt. Dadurch können Sie die Web-Server-Konfiguration überschreiben und Ihre eigene Konfiguration übermitteln.

Fügen Sie einfach die folgende Datei unter dem Pfad hinzu: .ebextensions\httpd\conf.d

Dateiinhalt: 

<VirtualHost *:80>
   LoadModule rewrite_module modules/mod_rewrite.so

   RewriteEngine On
   RewriteCond %{HTTP:X-Forwarded-Proto} !https
   RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
   RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

   <Proxy *>
     Order deny,allow
     Allow from all
   </Proxy>

   ProxyPass / http://localhost:8080/ retry=0
   ProxyPassReverse / http://localhost:8080/
   ProxyPreserveHost on

   ErrorLog /var/log/httpd/elasticbeanstalk-error_log

</VirtualHost>

Die '.ebextensions' ist der Standardkonfigurationsordner in AWS und der Rest zeigt nur auf die Datei und den Ordner, die Sie überschreiben möchten. Wenn die Datei oder der Ordner nicht existiert, erstellen Sie sie einfach.

2
Adi

Ich habe folgende Konfigurationen für elastische Beanstalk (64-Bit-Version von Amazon Linux 2016.09 v2.3.1, auf der Tomcat 8 Java 8 ausgeführt wird) . Ich erstellte ein Verzeichnis .ebextensions und fügte eine .config-YAML-Datei mit den Überschreibungsbedingungen hinzu

Zagas Lösung oben beschrieben (was sehr komplex ist) funktioniert für mich nicht.

  1. Weil "If" Bedingung unbekannt ist
  2. Aufgrund von Apache 2.2 habe ich keine mod_rewrite.so in meiner httpd.conf-Datei

Diese Lösung ist für mich sinnvoller, aber auch das funktioniert nicht. Nichts passiert und ich kann die Datei "ssl_rewrite.conf" im Verzeichnis "conf.d" nicht sehen.

Die dritte Lösung bestand darin, die Dateien "run.config" und "ssl_rewrite.conf" im Verzeichnis ".ebextendsion" hinzuzufügen.

run_config enthält

container_commands:
copy-config:
command: "cp .ebextensions/ssl_rewrite.conf /etc/httpd/conf.d"

ssl_rewrite.conf enthält 

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

ssl_rewrite.conf wird unter "conf.d" erstellt, aber die Umleitung von http zu https funktioniert nicht.

Die einzige funktionierende Lösung für mich bestand darin, die folgenden Zeilen in "/etc/httpd/conf.d/elasticbeanstalk/00_application.conf" hinzuzufügen.

<VirtualHost *:80>
......
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
......
</VirtualHost>

dies ist jedoch eine temporäre Lösung, und wenn eine Maschine ersetzt wird, ist meine https-Umleitung weg. 

1
aelve

AWS akzeptiert keine Unsicherungen (_) in Headern, während wir (-) verwenden können. Entfernen Sie also Unterstriche aus den Header-Variablen. Beispiel: - header_var_val = "irgendein Wert" Ersetzen Sie es mit headervarval = "einem bestimmten Wert ". Für mich geht das.

0
Rishabh Jhalani

Ich musste HTTPS nur für unsere Produktionsumgebung durchsetzen, und nicht für die Entwicklung und Bereitstellung, die sich ebenfalls auf Elastic Beanstalk befinden, jedoch keinen Load Balancer verwenden (und daher kein Zertifikat direkt zugewiesen werden kann). 

Ich verwende eine Umgebungsvariable USE_HTTPS. Wir kopieren die ssl_rewrite.conf-Datei nur dann, wenn USE_HTTPS auf true gesetzt ist. 

.ebextensions/files/ssl_rewrite.conf

RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
</If>

.ebextensions/https.config

files:
  "/home/ec2-user/https_setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      echo "USE_HTTPS env var: ${USE_HTTPS,,}"
      outfile=/etc/httpd/conf.d/ssl_rewrite.conf
      if [ "${USE_HTTPS,,}" == "true" ]; then
        echo "Configure SSL rewrite"
        cp .ebextensions/files/ssl_rewrite.conf $outfile
        chmod 644 $outfile
        chown root:root $outfile
      else
        [ -f $outfile ] && rm $outfile
        echo "Do not use SSL"
        exit 0
      fi

container_commands:
  01_https_setup:
    command: "/home/ec2-user/https_setup.sh"

Wenn Sie USE_HTTPS ändern, müssen Sie Ihre Anwendung erneut bereitstellen, damit die Änderung wirksam wird. Sie können auch die echo-Befehle in der https.config-Datei entfernen, wenn Sie möchten. 

0
nbeuchat

Nur für den Fall, dass noch immer jemand kämpft:

Ich habe seit einiger Zeit Probleme, und schließlich habe ich einen GitHub (vom AWS-Team) mit allen AWS-Konfigurationen gefunden. Das folgende Beispiel funktioniert für die HTTP> HTTPS-Umleitung für Apache 2.2. (Für die Konfiguration von Apache 2.4 und Nginx siehe den Link unten).

Apache 2.2

  1. Erstellen Sie eine Datei im Stammverzeichnis Ihrer App: YOUR_PROJECT_ROOT/.ebextensions/httpd/conf.d/elasticbeanstalk.conf (Wenn Sie IntelliJ/Java verwenden, stellen Sie sicher, dass sie zum abschließendes .WAR-Artefakt)

  2. Fügen Sie die folgenden Zeilen hinzu, um die Umleitung im virtuellen Host zu aktivieren:

    <VirtualHost *:80>
        LoadModule rewrite_module modules/mod_rewrite.so
        RewriteEngine On
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
        RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
    
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:8080/ retry=0
        ProxyPassReverse / http://localhost:8080/
        ProxyPreserveHost on
    
        ErrorLog /var/log/httpd/elasticbeanstalk-error_log
    </VirtualHost>
    

Weitere Beispiele für Apache 2.4 und Nginx finden Sie in diesem GitHub-Repository:

https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect/Java-Tomcat

Außerdem gibt es viele nützliche Konfigurationen und Beispiele.

Grüße

0
Joao Gavazzi

Wir haben es in unserem Backend gelöst, indem wir X-Forwarded-Proto richtig gehandhabt haben. 

Dies ist unsere Grails-Konfiguration, die Ihnen jedoch bei der Idee helfen wird:

    grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
    grails.plugin.springsecurity.portMapper.httpPort = 80
    grails.plugin.springsecurity.portMapper.httpsPort = 443
    grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
    grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'
    grails.plugin.springsecurity.secureChannel.definition = [
        [pattern: '/**', access: 'REQUIRES_SECURE_CHANNEL']
    ]
0
Amio.io

Warum legen Sie nicht einfach eine .htaccess-Datei im Stammordner ab? Auf diese Weise können Sie es einfach testen und debuggen. Wenn Sie es in die ZIP-Datei aufnehmen, wird es automatisch wieder für alle Instanzen bereitgestellt.

Verwenden Sie einfach .htaccess:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
0
Timo

Bitte beachten Sie, dass die am meisten gewählte Antwort jetzt ein bisschen alt ist .. Die Antwort von A Paul ist tatsächlich die richtige Antwort. Der in seiner Antwort bereitgestellte Link stammt von AWS (daher ist es die empfohlene Methode, um Ihre Apache-Konfiguration zu überschreiben, um die Umleitung von HTTP zu HTTPS durchzuführen, wenn Sie Ihre Anwendung unter Elastic Beanstalk ausführen).

Es ist eine sehr wichtige Sache zu beachten. Wenn Sie mehr als eine Webanwendung bereitstellen, funktioniert das Hinzufügen des Ordners .ebextensions in einer Ihrer Webanwendung nicht. Sie werden feststellen, dass keine der von Ihnen angegebenen Konfigurationen geschrieben oder erstellt wird. Wenn Sie mehrere Web-Apps in einer Umgebung mit Elastic Beanstalk bereitstellen, müssen Sie diesen Artikel von AWS Java Tomcat lesen. Bereitstellen mehrerer WAR-Dateien auf Elastic Beanstalk

Im Allgemeinen benötigen Sie die folgende Struktur, bevor Sie den Befehl eb zur Bereitstellung der WAR-Dateien darauf ausgeben:

MyApplication.Zip
├── .ebextensions
├── foo.war
├── bar.war
└── ROOT.war

wenn der .ebextentions-Ordner in jeder WAR-Datei vorhanden ist, werden Sie feststellen, dass er vollständig ignoriert wird und keine Konfigurationsänderungen vorgenommen werden.

Hoffe das hilft jemand anderem.

0
moto kazi

Mit den neuen Application Load Balancern können Sie dies jetzt ziemlich einfach tun ...

Stellen Sie sicher, dass Sie eine dieser Einstellungen vornehmen, wenn Sie eine EB-Umgebung einrichten (ich glaube, die Standardeinstellung ist weiterhin der klassische Load Balancer). Sie konnten den Typ nach dem Erstellen der Umgebung nicht mehr ändern, erstellen Sie ihn also erneut

Sobald dies erledigt ist, gehen Sie zu Ihren EC2-Einstellungen -> Load Balancers. Klicken Sie auf den Load Balancer, den Sie für Ihre EB-Umgebung erstellt haben. Sie müssen sicherstellen, dass Sie vor dieser Aufgabe einen HTTPS-Listener eingerichtet haben. Vergewissern Sie sich also, dass Sie HTTPS 443 mit einem SSL-Zertifikat abhören und den Datenverkehr mit HTTP auf 80 an Ihre Instanzen weiterleiten.

Fügen Sie dann einen neuen Listener hinzu, der HTTP überwacht, und fügen Sie die Standardaktion "Umleiten an:" hinzu. Stellen Sie sicher, dass Sie HTTPS als Protokoll, 443 als Port, "Ursprünglicher Host, Pfad, Abfrage" als Option und schließlich 301 als HTTP-Antwortcode festlegen.

Sobald dieser Listener hinzugefügt wurde, stellen Sie sicher, dass Sie Ihre EC2 Load Balancer-Sicherheitsgruppe so aktualisieren, dass sie sowohl HTTPS- als auch HTTP-Verbindungen akzeptiert. Auf dem Listener wird ein kleines Warnsymbol angezeigt, um Sie daran zu erinnern!

Chris

0
Kristian

Um zwei weitere Antworten auf diese Frage zu geben: https://stackoverflow.com/a/43026082/8775205 , https://stackoverflow.com/a/42035023/8775205 . Für Spring Boot Benutzer, die ihre Dienste auf AWS mit ELB bereitstellen und eine schrittweise Anleitung benötigen, können Sie eine ****. conf-Datei unter src/main/webapp/.ebextensions/httpd/conf.d/in Ihrem Projekt hinzufügen.

src
--main
----Java
----resources
----webapps
------.ebextensions
--------httpd
----------confd
------------****.conf

**** conf sieht wie folgt aus. Ich habe bemerkt, dass ich meine Test-Site mit einer einzigen Instanz besitze. Ich füge eine Bedingung hinzu, um sie auszuschließen. 

<VirtualHost *:80>
   LoadModule rewrite_module modules/mod_rewrite.so

   RewriteEngine On
   RewriteCond %{HTTP:X-Forwarded-Proto} !https
   RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker 
   RewriteCond %{HTTP_Host} !testexample.com #excludes test site
   RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

   <Proxy *>
     Order deny,allow
     Allow from all
   </Proxy>

   ProxyPass / http://localhost:8080/ retry=0
   ProxyPassReverse / http://localhost:8080/
   ProxyPreserveHost on

   ErrorLog /var/log/httpd/elasticbeanstalk-error_log

</VirtualHost>

Denken Sie anschließend daran, unter "maven-war-plugin" in Ihrer pom.xml eine "Ressource" hinzuzufügen, um die obige Konfiguration zu übernehmen.

<plugin>
     <groupId>org.Apache.maven.plugins</groupId>  
     <artifactId>maven-war-plugin</artifactId>  
     <configuration>  
         <webResources>
             <resource>  
               <!-- some other resource configured by yourself-->
             </resource> 
             <resource>
                <directory>src/main/webapps/.ebextensions</directory>
                 <targetPath>.ebextensions</targetPath>
                 <filtering>true</filtering>
             </resource> 
         </webResources>  
     </configuration>  
     <version>2.1.1</version>
 </plugin>

Abschließend Commit und Push Ihren Code, warten Sie auf AWS Codebuild und Codepipeline, um Ihren Code aus Ihrem Repository abzurufen und in der Beanstalk-Umgebung bereitzustellen

0
Tang Mao