Configurare un reindirizzamento da HTTP a HTTPS per il bilanciatore del carico HTTP(S) esterno globale (classico)

Questa pagina mostra come configurare un reindirizzamento da HTTP a HTTPS per il bilanciatore del carico HTTP(S) esterno globale (classico). Questa pagina è destinata solo a un bilanciatore del carico HTTP(S) esterno globale (classico). Se utilizzi un bilanciatore del carico in una modalità diversa, consulta una delle seguenti pagine:

Questo esempio mostra come utilizzare i reindirizzamenti URL per reindirizzare tutte le richieste dalla porta 80 (HTTP) alla porta 443 (HTTPS).

HTTPS utilizza TLS (SSL) per criptare le richieste e le risposte HTTP, rendendole più sicure e sicure. All'inizio del sito web, il sito web che usa HTTPS contiene https:// anziché http://.

Per nuovi bilanciatori del carico HTTPS

Se stai creando un nuovo bilanciatore del carico HTTPS, puoi utilizzare Google Cloud Console per configurare un reindirizzamento da HTTP a HTTPS.

Durante la creazione del frontend del bilanciatore del carico HTTPS, segui questi passaggi:

  1. In Google Cloud Console, vai alla pagina di configurazione del bilanciatore del carico.

    Vai al bilanciamento del carico (versione classica)

  2. Fai clic su Configurazione frontend.
  3. In Protocollo, seleziona HTTPS (include HTTP/2).
  4. In Indirizzo IP, seleziona un indirizzo IP riservato.
  5. Per creare il reindirizzamento, fai clic sulla casella di controllo Abilita reindirizzamento da HTTP a HTTPS.

Per selezionare la casella di controllo, devi selezionare il protocollo HTTPS e utilizzare un indirizzo IP riservato (non temporaneo).

Casella di controllo di reindirizzamento da HTTP a HTTPS in Google Cloud Console.
Figura 1. Casella di controllo di reindirizzamento da HTTP a HTTPS in Google Cloud Console. (fai clic per ingrandire)

A seconda del tipo di backend, utilizza le istruzioni di Google Cloud Console di una delle seguenti guide per completare la configurazione:

L'impostazione della casella di controllo Abilita reindirizzamento da HTTP a HTTPS crea automaticamente un ulteriore bilanciatore del carico HTTP parziale che comprende una mappa URL, una regola di forwarding e un proxy HTTP di destinazione. Questo bilanciatore del carico HTTP parziale utilizza lo stesso indirizzo IP del bilanciatore del carico HTTPS e reindirizza le richieste HTTP al frontend HTTPS del bilanciatore del carico. Utilizza 301 Moved Permanently come codice di reindirizzamento predefinito.

Dopo aver creato il bilanciatore del carico HTTPS, puoi visualizzare il bilanciatore del carico HTTP parziale nell'elenco dei bilanciatori del carico, con un suffisso -redirect. Testa la configurazione seguendo i passaggi descritti in Testare il reindirizzamento da HTTP a HTTPS.

Per bilanciatori del carico esistenti

Se hai già un bilanciatore del carico HTTPS esterno (chiamato qui LB1) che gestisce il traffico HTTPS sulla porta 443, devi creare un bilanciatore del carico HTTP HTTP esterno parziale (chiamato qui LB2) con la seguente configurazione:

  • Lo stesso indirizzo IP frontend utilizzato da LB1
  • Un reindirizzamento configurato nella mappa URL

Questo bilanciatore del carico HTTP parziale utilizza lo stesso indirizzo IP del bilanciatore del carico HTTPS e reindirizza le richieste HTTP al frontend HTTPS del bilanciatore del carico.

Questa architettura è mostrata nel diagramma seguente.

Architettura di configurazione del reindirizzamento da HTTP a HTTPS.
Figura 2. Architettura di configurazione del reindirizzamento da HTTP a HTTPS

Reindirizzamento del traffico al bilanciatore del carico HTTPS

Dopo aver verificato che il bilanciatore del carico HTTPS esterno (LB1) funzioni, puoi creare il bilanciatore del carico HTTP esterno parziale (LB2) con il frontend configurato per reindirizzare il traffico a LB1.

In questo esempio viene utilizzato il codice di risposta 301. Puoi invece utilizzare un codice di risposta diverso.

Per configurare il reindirizzamento con gcloud, devi importare un file YAML e assicurarti che il proxy HTTP di destinazione rimandi alla mappa degli URL che reindirizza il traffico. Se utilizzi Google Cloud Console, questa operazione viene gestita per te.

I bilanciatori del carico HTTP(S) esterni a livello di area geografica non sono supportati in Google Cloud Console.

console

Avvia la configurazione
  1. In Google Cloud Console, vai alla pagina Bilanciamento del carico.

    Vai al bilanciamento del carico

  2. In Bilanciamento del carico HTTP(S), fai clic su Avvia configurazione.
  3. Nella sezione Solo per Internet o interno, seleziona Da Internet alle mie VM.
  4. In Globale o a livello di area geografica, seleziona Bilanciatore del carico HTTP(S) globale (classico).
  5. Per Nome del bilanciatore del carico, inserisci qualcosa come http-redirect.
  6. Per continuare, tieni aperta la finestra.
Ignora la configurazione del backend
  1. Salta la sezione Configurazione backend.
Configura il reindirizzamento nella mappa URL
  1. Nella colonna a sinistra della pagina, fai clic su Regole host e percorso.
  2. Seleziona Host avanzato e regola del percorso (reindirizzamento degli URL, riscrittura dell'URL).
  3. In Azione, seleziona Reindirizza il client a un altro host/percorso.
  4. Lascia vuoto il campo Reindirizzamento reindirizzamento.
  5. Nella sezione Reindirizzamento del percorso, seleziona Reindirizzamento prefisso.
  6. Lascia vuoto il campo Valore percorso.
  7. In Redirect response code (Codice di reindirizzamento), seleziona 301 - Moving Permanently (Spostato in modo permanente).
  8. Nella sezione Reindirizzamento HTTPS, seleziona Attiva.
  9. Fai clic su Fine.
  10. Per continuare, tieni aperta la pagina di configurazione del bilanciatore del carico.
Configura la regola di forwarding HTTP con lo stesso indirizzo IP utilizzato in LB1
  1. Nella pagina di configurazione del bilanciatore del carico, fai clic su Configurazione frontend.
  2. Imposta Protocollo su HTTP.
  3. Imposta l'indirizzo IP sullo *stesso* indirizzo IP che utilizzi per il bilanciatore del carico HTTPS.
  4. Assicurati che l'opzione Porta sia impostata su 80 per consentire il traffico HTTP.
  5. Fai clic su Fine.
  6. Per continuare, tieni aperta la finestra.
  7. Esamina la configurazione
  8. Nel riquadro a sinistra, fai clic su Rivedi e finalizza.
  9. Confronta le impostazioni con quelle che intendi creare.
  10. Se è tutto corretto, fai clic su Crea.

Al termine, Google Cloud Console visualizza due bilanciatori del carico, come segue.

Entrambi i bilanciatori del carico

Google Cloud Console visualizza le informazioni sul bilanciatore del carico web-map-http come segue.

Bilanciatore del carico HTTP

gcloud

  1. Crea un file YAML /tmp/web-map-http.yaml. In questo esempio viene utilizzato MOVED_PERMANENTLY_DEFAULT come codice di risposta.
  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. Convalida la mappa URL.
  4.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    Se i test hanno esito positivo e il comando restituisce un messaggio di operazione riuscita, salva le modifiche nella mappa URL.

  5. Crea la mappa URL del bilanciatore del carico HTTP importando il file YAML. Il nome per questa mappa di URL è web-map-http.
  6.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    Se stai aggiornando una mappa URL esistente, viene visualizzato il seguente messaggio:

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

    Per continuare, premi Y.

  7. Verifica che la mappa degli URL sia aggiornata. La mappa URL del bilanciatore del carico HTTP dovrebbe essere simile alla seguente:
  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. Crea un nuovo proxy HTTP di destinazione o aggiorna un proxy HTTP di destinazione esistente, utilizzando web-map-http come mappa URL.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    OPPURE
           gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. Crea una regola di forwarding per instradare le richieste in entrata al proxy. Il flag --address specifica lb-ipv4-1, che è lo stesso indirizzo IP utilizzato per il bilanciatore del carico HTTPS esterno.
  12.        gcloud compute forwarding-rules create http-content-rule \
               --load-balancing-scheme=EXTERNAL \
               --network-tier=PREMIUM \
               --address=lb-ipv4-1 \
               --global \
               --target-http-proxy=http-lb-proxy \
               --ports=80
           

Aggiungere un'intestazione personalizzata

Se vuoi, aggiungi l'intestazione HTTP Strict-Transport-Security al servizio di backend del bilanciatore del carico HTTPS, come segue:

  • Nome intestazione: Strict-Transport-Security
  • Valore intestazione: max-age=31536000; includeSubDomains; preload

Questa impostazione invia l'intestazione personalizzata al client in modo che la prossima volta che il client cercherà di accedere all'URL tramite HTTP, il browser eseguirà il reindirizzamento.

Per aggiungere l'intestazione personalizzata alla configurazione del servizio di backend, utilizza il flag --custom-response-header.

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

Per ulteriori informazioni, consulta Creazione di intestazioni personalizzate.

Test del reindirizzamento da HTTP a HTTPS

Tieni presente l'indirizzo IP riservato che utilizzi per entrambi i bilanciatori del carico.

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

In questo esempio, supponiamo che l'indirizzo IP riservato sia 34.98.77.106. L'URL http://34.98.77.106/ reindirizza a https://34.98.77.106/.

Una volta trascorsi alcuni minuti, puoi verificarlo eseguendo questo comando curl.

curl -v http://hostname.com

Esempio di output:

* 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

Passaggi successivi