Wie kann ich den HTTP-Datenverkehr auf meinem Classic Load Balancer auf HTTPS umleiten?

Letzte Aktualisierung: 05.11.2020

Ich verwende HTTP- und HTTPS-Listener auf meinem Classic Load Balancer. Mein Classic Load Balancer entlastet SSL, und die Backend-Verbindung lauscht auf einem einzigen HTTP-Port (Port 80). Wenn ich versuche, den Datenverkehr von HTTP auf HTTPS (Port 443) umzuleiten, erhalte ich den Fehler "ERR_TOO_MANY_REDIRECTS". Wie kann ich diesen Fehler beheben, ohne meinen Backend-Listener auf Port 443 zu ändern?

Kurzbeschreibung

Classic Load Balancer können den HTTP-Verkehr nicht auf HTTPS umleiten. Stattdessen können Sie Rewrite-Regeln auf den Webservern von Amazon-Elastic-Compute-Cloud-(Amazon EC2)-Instances hinter Ihrem Classic Load Balancer einfügen.

Sie müssen Ihre Rewrite-Regeln so konfigurieren, dass der X-Forwarded-Proto-Header verwendet wird und nur HTTP-Clients umgeleitet werden. Andernfalls können die Rewrite-Regeln eine Endlosschleife von Umleitungsanforderungen zwischen Ihrem Classic Load Balancer und den dahinter liegenden Instanzen erzeugen. Eine solche Schleife führt zu dem Fehler "ERR_TOO_MANY_REDIRECTS".

Hinweis: Application Load Balancer können den HTTP-Verkehr mit Hilfe von Umleitungsaktionen auf HTTPS umleiten. Migrieren Sie Ihren Classic Load Balancer zu einem Application Load Balancer, um diese Funktion zu nutzen.

Auflösung

Sehen Sie sich die folgenden Beispielkonfigurationen für Apache-, NGINX- und IIS-Webserver an. Konfigurieren Sie die Webserver hinter Ihrem Classic Load Balancer so, dass sie den X-Forwarded-Proto-Header verwenden, um den Datenverkehr danach zu richten, ob Clients HTTP oder HTTPS verwenden. Achten Sie darauf, dass Sie Ihren Webservern Rewrite-Regeln hinzufügen, die:

  • Clients, die HTTP verwenden, auf eine HTTPS-URL umleiten
  • Clients, die direkt HTTPS verwenden, dienen

Wichtig: Die folgenden Konfigurationen sind nur als Beispiele zu sehen. Ändern Sie diese entsprechend Ihrer Konfiguration und Ihrem Anwendungsfall.

Apache-Server: Methode der virtuellen Host-Datei (bewährte Methode)

1.    Öffnen Sie Ihre Apache-Konfigurationsdatei. Mögliche Speicherorte sind /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4), oder /etc/apache2/apache2.conf (Apache unter Ubuntu).

2.    Fügen Sie eine Rewrite-Regel in den Abschnitt VirtualHost Ihrer Konfigurationsdatei ein, 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.    Sichern Sie Ihre Apache-Konfigurationsdatei.

4.    Starten Sie Apache neu.

Apache-Server: .htaccess-Datei-Methode (keine bewährte Methode)

Warnung: Es empfiehlt sich, die im vorherigen Abschnitt beschriebene Methode der virtuellen Apache-Hostdatei zu verwenden. Gemäß den Richtlinien für Apache .htaccess-Dateien verwenden Sie .htaccess-Dateien nur, wenn Sie keinen Zugriff auf die Hauptkonfigurationsdatei von Apache haben.

1.    Öffnen Sie Ihre Apache-Konfigurationsdatei. Mögliche Speicherorte sind /etc/httpd/conf/httpd.conf (Apache 2/httpd) oder /etc/apache2/sites-enabled/ (Apache 2.4).

2.    Bearbeiten Sie die Verzeichnisrichtlinie wie folgt, um .htaccess zu aktivieren:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3.    Sichern Sie Ihre Apache-Konfigurationsdatei.

4.    Öffnen Sie Ihre .htaccess-Datei.

5.    Fügen Sie eine Rewrite-Regel ähnlich der folgenden hinzu:

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

6.    Sichern Sie Ihre .htaccess-Datei.

7.    Starten Sie Apache neu.

NGINX-Server

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

1.    Öffnen Sie Ihre NGINX-Konfigurationsdatei (nginx.conf).

2.    Fügen Sie die folgende Rewrite-Regel hinzu. Stellen Sie sicher, dass Sie die Rewrite-Regel für Ihre Konfiguration anpassen.

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

3.    Starten Sie NGINX neu.

IIS-Server

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

1.    Installieren Sie das IIS-URL-Rewrite-Modul von Microsoft.

2.    Öffnen Sie Ihre web.config-Datei.

3.    Fügen Sie die folgende Rewrite-Regel in den Abschnitt <system.Webserver> ein. Stellen Sie sicher, dass Sie die Rewrite-Regel für Ihre konkrete Konfiguration anpassen.

<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.    Speichern Sie Ihre web.config-Datei.

5.    Öffnen Sie den IIS-Manager.

6.    Aktualisieren Sie die Standard-Website.

7.    Überprüfen Sie, ob Ihre neue Rewrite-Regel im Abschnitt URL Rewrite erscheint.

8.    Starten Sie Ihre Website neu.

9.    Überprüfen Sie, ob Ihre Umleitung funktioniert.