Direkt zum Inhalt

Wie leite ich den HTTP-Datenverkehr auf meinem ELB Classic Load Balancer auf HTTPS um?

Lesedauer: 4 Minute
0

Ich verwende HTTP- und HTTPS-Listener auf meinem Elastic Load Balancing (ELB) Classic Load Balancer. Mein Classic Load Balancer lagert SSL aus und die Backend-Verbindung hört auf einem einzigen HTTP-Port (Port 80) zu. Wenn ich versuche, den Datenverkehr von HTTP auf HTTPS (Port 443) umzuleiten, erhalte ich den Fehler „ERR_TOO_MANY_REDIRECTS“.

Kurzbeschreibung

Classic Load Balancer unterstützt die Umleitung von HTTP-Datenverkehr auf HTTPS nicht als native Funktion. Damit dies funktioniert, musst du die Rewrite-Regeln auf den Webserver-Instances hinter dem Classic Load Balancer konfigurieren.

Konfiguriere die Rewrite-Regeln auf den Webanwendungsservern so, dass sie den X-Forwarded-Proto-Header verwenden und HTTP-Anfragen umleiten. Andernfalls können die Rewrite-Regeln zu einer Endlosschleife von Umleitungsanfragen zwischen dem Classic Load Balancer und den Instances hinter dem Load Balancer führen. Eine solche Schleife führt zum Fehler „ERR_TOO_MANY_REDIRECTS“.

Hinweis: Application Load Balancer unterstützen Umleitungsaktionen, mit denen HTTP-Datenverkehr auf HTTPS umgeleitet werden kann. Um diese Funktion zu verwenden, migriere den Classic Load Balancer zu einem Application Load Balancer.

Lösung

Sieh dir die folgenden Beispielkonfigurationen für Apache-, NGINX- und IIS-Webserver an. Konfiguriere die Webserver hinter dem Classic Load Balancer so, dass sie den X-Forwarded-Proto-Header verwenden, um den Datenverkehr zu leiten, je nachdem, ob Clients HTTP oder HTTPS verwenden. Stelle sicher, dass du den Webservern Rewrite-Regeln hinzufügst, die:

  • HTTP verwenden, um Clients zu einer HTTPS-URL umzuleiten
  • HTTPS verwenden, um Clients direkt zu bedienen

Hinweis: Ändere die folgenden Beispielkonfigurationen basierend auf der Konfiguration und dem Anwendungsfall.

Apache-Server: Methode für die virtuelle Hostdatei

Es hat sich bewährt, die folgende Methode zur Konfiguration der Webserver zu verwenden:

  1. Öffne die Apache-Konfigurationsdatei. Mögliche Orte sind /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4) oder /etc/apache2/apache2.conf (Apache auf Ubuntu).

  2. Füge dem Abschnitt VirtualHost der Konfigurationsdatei eine Rewrite-Regel hinzu, die der folgenden ähnelt:

    <VirtualHost *:80>RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} =http
    RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
    </VirtualHost>
  3. Speichere die Apache-Konfigurationsdatei.

  4. Starte Apache neu.

Apache-Server: .htaccess file method

Wenn du keinen Zugriff auf die Apache-Hauptkonfigurationsdatei hast, verwende .htaccess-Dateien. Weitere Informationen findest du im Abschnitt Wann sollten .htaccess-Dateien (nicht) verwendet werden sollten auf der Seite Apache HTTP Server Tutorial: .htaccess-Dateien auf der Apache-Website.

Gehe wie folgt vor, um den Webserver zu konfigurieren:

  1. Öffne die Apache-Konfigurationsdatei. Mögliche Orte sind /etc/httpd/conf/httpd.conf (Apache 2/httpd) oder /etc/apache2/sites-enabled/ (Apache 2.4).

  2. Bearbeite die Directory-Direktive, um .htaccess zu aktivieren:

    <Directory "/var/www/html">    Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
  3. Speichere die Apache-Konfigurationsdatei.

  4. Öffne die .htaccess-Datei.

  5. Füge eine Rewrite-Regel hinzu, die der folgenden ähnelt:

    RewriteEngine OnRewriteCond %{HTTP:X-Forwarded-Proto} =http
    RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
  6. Speichere die .htaccess-Datei.

  7. Starte Apache neu.

NGINX-Server

Hinweis: Diese Lösung gilt für NGINX 1.10.3 (Ubuntu) und NGINX 1.12.1 (Amazon Linux).

Führe die folgenden Schritte aus:

  1. Öffne die NGINX-Konfigurationsdatei (nginx.conf).

  2. Füge die folgende Rewrite-Regel hinzu. Achte darauf, die Rewrite-Regel für die Konfiguration zu ändern:

    server {    listen 80;
        server_name _;
        if ($http_x_forwarded_proto = 'http'){
        return 301 https://$host$request_uri;
        }
    }
  3. Starte NGINX neu.

IIS-Server

Hinweis: Diese Lösung gilt für Microsoft Windows Server 2012 R2 und 2016 Base.

Führe die folgenden Schritte aus:

  1. Installiere das IIS-URL-Rewrite-Modul. Weitere Informationen findest du unter URL Rewrite auf der Microsoft-Website.

  2. Öffne die Datei web.config.

  3. Füge dem Abschnitt <system.webServer> die folgende Rewrite-Regel hinzu. Ändere die Rewrite-Regel für die spezifische Konfiguration:

    <rewrite>
        <rules>
            <rule name="Rewrite HTTP to HTTPS" stopProcessing="true">
                <match url="^(.*)$"/>
                <conditions logicalGrouping="MatchAny">
                    <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$"/>
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
            </rule>
        </rules>
    </rewrite>
  4. Speichere die web.config-Datei.

  5. Öffne den IIS-Manager.

  6. Aktualisiere die Standardwebsite.

  7. Vergewissere dich, dass die neue Rewrite-Regel im Abschnitt URL Rewrite angezeigt wird.

  8. Starte deine Website neu.

  9. Vergewissere dich, dass die Umleitung funktioniert.

Ähnliche Informationen

Warum erhalte ich einen HTTP 5xx-Fehler, wenn ich eine Verbindung zu Webservern herstelle, die auf EC2-Instances ausgeführt werden, die für die Verwendung von Classic Load Balancing konfiguriert sind?

AWS OFFICIALAktualisiert vor 2 Jahren