fragen stichworte

Wie wird HTTP zu HTTPS unter AWS Application Load Balancer umgeleitet?

Unsere Website muss HIPAA-konform sein, sodass alles verschlüsselt werden muss. Ich möchte nicht, dass der Client eine Fehlermeldung erhält, wenn er "http://mysite.com" eingibt. Daher muss ich sowohl HTTP als auch HTTPS unterstützen und HTTP an HTTPS umleiten. Habe ich recht?

Ich habe es auf den Webservern richtig gemacht. Wenn ich also direkt eine Verbindung zu den Webservern herstelle, wird HTTP automatisch zu HTTPS umgeleitet. Alles gut.

Die Webserver sitzen jedoch hinter einem AWS Application Load Balancer. Ich weiß nicht, wie man HTTP auf der ELB zu HTTPS umleitet. So können Client-Browser weiterhin über HTTP eine Verbindung mit der ELB herstellen.

So richten Sie HTTP => HTTPS auf einem AWS Application Load Balancer ein

Mit anderen Worten, ich bin mir sicher, dass die Verbindung zwischen ELB und Webservern HTTPS ist, aber wie stellen Sie sicher, dass die Verbindung zwischen den Client-Browsern und der ELB HTTPS ist?

antworten

Ab Juli 2018 wird dies von Load Balancern für Anwendungen unterstützt.

  • Ihren HTTP:80 Listener hinzufügen/bearbeiten
  • Setzen Sie die Aktion auf Redirect
  • Protokoll: https
  • port: 443
  • Setzen Sie die nächste Dropdown-Liste auf Original host, path, query
  • Setzen Sie die letzte Dropdown-Liste auf 301 - Permanently moved

Abbild der Einstellungen für einen HTTP-zu-HTTPS-Listener in AWS Application Load Balancer

Normalerweise wird der ELB so eingestellt, dass er https (Port 443) empfängt und an die EC2-Instanz (Load Balancer Target) auf http (Port 80) weiterleitet.

Der Back-End-Webserver leitet diese Anforderungen an Port 443 im Lastenausgleichsmodul um und verursacht eine Endlosschleife der Umleitung (zwischen dem Lastenausgleichsmodul und dem Back-End-Webserver).

Eine häufige Fehlermeldung ist ERR_TOO_MANY_REDIRECTS.

Die Lösung besteht darin, das X-Forwarded-Proto, das Protokoll, das vom Load Balancer angezeigt wird, zu betrachten, wenn Sie sich für die Umleitung entscheiden.

Für nginx sieht die Konfiguration wie folgt aus:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

und für Apache .htaccess etwas wie folgt:

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

HINWEIS: Auch wenn man meinen könnte, dass dies ohne Webserver-Neukonfiguration möglich wäre, gibt es ab Frühjahr 2018 keine Möglichkeit, dies nur mit ELB zu lösen, dh Sie müssen Ihren Webserver so konfigurieren, dass dies funktioniert .