HTTP-Anfragen an HTTPS weiterleiten

In diesem Beispiel wird gezeigt, wie Sie Weiterleitungen anhand von URL-Mappings verwenden, um alle Anfragen von HTTP zu HTTPS weiterzuleiten. In diesem Beispiel wird gezeigt, wie Sie Weiterleitungen über die bekannten Ports 80 (für HTTP) und 443 (für HTTPS) einrichten. Die Verwendung dieser spezifischen Portnummern ist jedoch nicht erforderlich. Jede Weiterleitungsregel für einen Application Load Balancer kann auf einen einzelnen Port von 1 bis 65535 verweisen.

HTTPS verwendet TLS (SSL), um HTTP-Anfragen und ‑Antworten zu verschlüsseln, wodurch es sicherer wird. Bei einer Website, die HTTPS verwendet, steht am Anfang der URL https:// anstelle von http://.

Für neue HTTPS-Application-Load-Balancer

Wenn Sie einen neuen HTTPS-Application-Load-Balancer erstellen, können Sie mit derGoogle Cloud Console eine HTTP-zu-HTTPS-Weiterleitung einrichten.

Führen Sie die folgenden Schritte aus, um das Frontend des Load Balancers zu erstellen:

  1. Rufen Sie in der Console von Google Cloud die Konfigurationsseite des Load Balancers auf.

    Zu „Load-Balancing“ (globalen externen Application Load Balancer erstellen)

  2. Geben Sie unter Name des Load Balancers einen Namen ein.
  3. Klicken Sie auf Frontend-Konfiguration.
  4. Wählen Sie für Protokoll die Option HTTPS (einschließlich HTTP/2) aus.
  5. Klicken Sie unter IP-Adresse auf IP-Adresse erstellen. Geben Sie einen Namen für die neue statische IP-Adresse ein und klicken Sie auf Reservieren.
  6. Wählen Sie unter Zertifikat ein SSL-Zertifikat aus.
  7. Klicken Sie auf das Kästchen HTTP-zu-HTTPS-Weiterleitung aktivieren, um die Weiterleitung zu erstellen.
  8. Klicken Sie auf Fertig.
  9. Schließen Sie das Backend und andere erforderliche Konfigurationen ab.
  10. Klicken Sie auf Erstellen.

Sie müssen das HTTPS-Protokoll auswählen und eine reservierte IP-Adresse (nicht sitzungsspezifisch) verwenden, um das Kästchen aktivieren zu können.

Kästchen für HTTP-zu-HTTPS-Weiterleitung in der Google Cloud Console
Abbildung 1. Kästchen für HTTP-zu-HTTPS-Weiterleitung in der Console von Google Cloud (zum Vergrößern klicken)

Verwenden Sie je nach Backendtyp die Anleitungen für die Console von Google Cloud aus einem der folgenden Leitfäden, um diese Einrichtung abzuschließen:

Wenn Sie das Kästchen HTTP-zu-HTTPS-Weiterleitung aktivieren auswählen, wird automatisch ein zusätzlicher partieller HTTP-Load-Balancer erstellt, der aus einem URL-Mapping, einer Weiterleitungsregel und einem Ziel-HTTP-Proxy besteht. Dieser partielle HTTP-Load-Balancer verwendet dieselbe IP-Adresse wie Ihr HTTPS-Load-Balancer und leitet HTTP-Anfragen an das HTTPS-Frontend Ihres Load Balancers weiter. Als Standardweiterleitungs-Antwortcode wird 301 Moved Permanently verwendet.

Nachdem der HTTPS-Load-Balancer erstellt wurde, wird der partielle HTTP-Load-Balancer in der Load-Balancer-Liste mit dem Suffix ‑redirect angezeigt. Testen Sie Ihre Einrichtung anhand der Schritte unter HTTP-zu-HTTPS-Weiterleitung testen.

Für vorhandene Load Balancer

Wenn Sie bereits einen HTTPS-Application-Load-Balancer (hier LB1 genannt) haben, der HTTPS-Traffic an Port 443 bedient, müssen Sie einen partiellen HTTP-Application-Load-Balancer (hier LB2 genannt) mit folgender Einrichtung erstellen:

  • gleiche Frontend-IP-Adresse wie bei LB1
  • im URL-Mapping konfigurierte Weiterleitung

Dieser partielle HTTP-Load-Balancer verwendet dieselbe IP-Adresse wie Ihr HTTPS-Load-Balancer und leitet HTTP-Anfragen an das HTTPS-Frontend Ihres Load Balancers weiter.

Diese Architektur ist im folgenden Diagramm dargestellt.

Konfigurationsarchitektur der HTTP-zu-HTTPS-Weiterleitung
Abbildung 2. Konfigurationsarchitektur der HTTP-zu-HTTPS-Weiterleitung (zum Vergrößern klicken)

Traffic an den HTTPS-Load-Balancer weiterleiten

Nachdem Sie kontrolliert haben, dass der HTTPS-Load-Balancer (LB1) funktioniert, können Sie den partiellen externen HTTP-Load-Balancer (LB2) mit seinem Frontend erstellen, um den Traffic an LB1 weiterzuleiten.

In diesem Beispiel wird der Antwortcode 301 verwendet. Sie können aber auch einen anderen Antwortcode nutzen.

Zum Konfigurieren der Weiterleitung mit gcloud müssen Sie eine YAML-Datei importieren und Ihr Ziel-HTTP-Proxy muss auf das URL-Mapping verweisen, das Traffic weiterleitet. Wenn Sie die Console von Google Cloud verwenden, wird dies für Sie erledigt.

Regionale externe Application Load Balancer werden in der Console von Google Cloud nicht unterstützt.

gcloud

  1. Erstellen Sie eine YAML-Datei vom Typ /tmp/web-map-http.yaml. In diesem Beispiel wird MOVED_PERMANENTLY_DEFAULT als Antwortcode verwendet.
  2.        kind: compute#urlMap
           name: web-map-http
           defaultUrlRedirect:
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
             httpsRedirect: True
           tests:
           - description: Test with no query parameters
             host: example.com
             path: /test/
             expectedOutputUrl: https://example.com/test/
             expectedRedirectResponseCode: 301
           - description: Test with query parameters
             host: example.com
             path: /test/?parameter1=value1&parameter2=value2
             expectedOutputUrl: https://example.com/test/?parameter1=value1&parameter2=value2
             expectedRedirectResponseCode: 301
           
  3. Validieren Sie das URL-Mapping.
  4.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    Wenn die Tests erfolgreich sind und der Befehl eine Erfolgsmeldung ausgibt, speichern Sie die Änderungen im URL-Mapping.

  5. Erstellen Sie das URL-Mapping des HTTP-Load-Balancers. Importieren Sie dazu die YAML-Datei. Der Name für dieses URL-Mapping ist web-map-http.
  6.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    Wenn Sie ein vorhandenes URL-Mapping aktualisieren, wird die folgende Eingabeaufforderung angezeigt:

           Url Map [web-map-http] will be overwritten.
    
           Do you want to continue (Y/n)?
           

    Drücken Sie Y, um fortzufahren.

  7. Vergewissern Sie sich, dass das URL-Mapping aktualisiert wurde. Das URL-Mapping Ihres HTTP-Load-Balancers sollte in etwa so aussehen:
  8.        gcloud compute url-maps describe web-map-http
           
           creationTimestamp: '2020-03-23T10:53:44.976-07:00'
           defaultUrlRedirect:
             httpsRedirect: true
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
           fingerprint: 3A5N_RLrED8=
           id: '2020316695093397831'
           kind: compute#urlMap
           name: web-map-http
           selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
           
  9. Erstellen Sie einen neuen Ziel-HTTP-Proxy oder aktualisieren Sie einen vorhandenen Ziel-HTTP-Proxy mit web-map-http als URL-Mapping.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    ODER
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. Erstellen Sie eine Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten. Das Flag --address gibt lb-ipv4-1 an. Dies ist die IP-Adresse, die für den externen HTTPS-Load-Balancer verwendet wird.
  12.        gcloud compute forwarding-rules create http-content-rule \
               --load-balancing-scheme=EXTERNAL_MANAGED \
               --address=lb-ipv4-1 \
               --network-tier=PREMIUM \
               --global \
               --target-http-proxy=http-lb-proxy \
               --ports=80
           

Benutzerdefinierten HSTS-Header hinzufügen

Wenn Sie den HTTP-Strict-Transport-Security-Header zum Backend-Dienst Ihres HTTPS-Load-Balancers hinzufügen, sendet der Load Balancer den benutzerdefinierten Header an den Client, sodass der Browser beim nächsten Versuch des Clients, über HTTP auf die URL zuzugreifen, die Anfrage weiterleitet. Die Headereinstellungen sind folgende:

  • Headername: Strict-Transport-Security
  • Headerwert: max-age=31536000; includeSubDomains; preload

Verwenden Sie das Flag --custom-response-header, um der Konfiguration des Backend-Dienstes den benutzerdefinierten Header hinzuzufügen.

gcloud compute backend-services update BACKEND_SERVICE_NAME_LB1 \
    --global \
    --custom-response-header='Strict-Transport-Security:max-age=31536000; includeSubDomains; preload'

Weitere Informationen finden Sie unter Benutzerdefinierte Header erstellen.

HTTP-zu-HTTPS-Weiterleitung testen

Notieren Sie sich die reservierte IP-Adresse, die Sie für beide Load-Balancer nutzen.

gcloud compute addresses describe lb-ipv4-1 
--format="get(address)"
--global

In diesem Beispiel wird davon ausgegangen, dass die reservierte IP-Adresse 34.98.77.106 ist. Die URL http://34.98.77.106/ leitet zu https://34.98.77.106/ weiter.

Nach einigen Minuten können Sie die Weiterleitung mit dem folgenden Befehl curl testen.

curl -v http://hostname.com

Beispielausgabe:

* Connected to 34.98.77.106 (34.98.77.106) port 80 (#0)
> GET / HTTP/1.1
> Host: hostname.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Location: https://hostname.com
< Content-Length: 220
< Date: Fri, 30 Jul 2021 21:32:25 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://hostname.com">here</A>.
</BODY></HTML>
* Connection #0 to host hostname.com left intact