Questo esempio mostra come utilizzare i reindirizzamenti della mappa URL per reindirizzare tutte le richieste da HTTP a HTTPS. Questo esempio mostra come configurare i reindirizzamenti utilizzando le note porte 80 (per HTTP) e 443 (per HTTPS). Tuttavia, non è obbligatorio utilizzare questi specifici numeri di porta. Ogni regola di forwarding per un bilanciatore del carico delle applicazioni può fare riferimento a una singola porta compresa tra 1 e 65535.
HTTPS utilizza TLS (SSL) per criptare le richieste e le risposte HTTP e questo lo rende più sicuro. Un sito web che utilizza HTTPS ha https:// all'inizio dell'URL anziché http://.
Per i nuovi bilanciatori del carico delle applicazioni HTTPS
Se stai creando un nuovo bilanciatore del carico delle applicazioni HTTPS, puoi utilizzare la consoleGoogle Cloud per configurare un reindirizzamento da HTTP ad HTTPS.
Durante la creazione del frontend del bilanciatore del carico, segui questi passaggi:
- Nella console Google Cloud , vai alla pagina di configurazione del bilanciatore del carico.
Vai a Bilanciamento del carico (crea un bilanciatore del carico delle applicazioni esterno globale)
- In Nome bilanciatore del carico, inserisci un nome.
- Fai clic su Configurazione frontend.
- In Protocollo, seleziona HTTPS (include HTTP/2).
- In Indirizzo IP, fai clic su Crea indirizzo IP. Inserisci un nome per il nuovo indirizzo IP statico e fai clic du Prenota.
- In Certificato, seleziona un certificato SSL.
- Per creare il reindirizzamento, seleziona la casella di controllo Attiva il reindirizzamento da HTTP a HTTPS.
- Fai clic su Fine.
- Completa il backend e le altre configurazioni richieste.
- Fai clic su Crea.
Per poter selezionare la casella di controllo, devi selezionare il protocollo HTTPS e utilizzare un indirizzo IP prenotato (non effimero).
A seconda del tipo di backend, utilizza le istruzioni della console Google Cloud riportate in una delle seguenti guide per completare questa configurazione:
Se selezioni la casella di controllo Attiva reindirizzamento da HTTP a HTTPS, viene creato automaticamente un ulteriore bilanciatore del carico HTTP parziale, costituito da 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 risposta
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 il suffisso -redirect. Verifica la configurazione seguendo i passaggi descritti in Test del reindirizzamento da HTTP a HTTPS.
Per i bilanciatori del carico esistenti
Se hai già un bilanciatore del carico delle applicazioni HTTPS (qui denominato LB1) che gestisce il traffico HTTPS sulla porta 443, devi creare un bilanciatore del carico delle applicazioni HTTP parziale (qui denominato 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 è illustrata nel seguente diagramma.
Reindirizzamento del traffico al bilanciatore del carico HTTPS
Dopo aver verificato che il bilanciatore del carico HTTPS (LB1) funzioni, puoi creare il bilanciatore del carico HTTP parziale (LB2) con il frontend configurato per reindirizzare il traffico a LB1.
Questo esempio utilizza il codice di risposta 301. In alternativa, puoi 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 URL che reindirizza il traffico. Se utilizzi la console Google Cloud , questa operazione viene gestita automaticamente.
I bilanciatori del carico delle applicazioni esterni regionali non sono supportati nella console Google Cloud .
gcloud
- Crea un file YAML
/tmp/web-map-http.yaml. Questo esempio utilizza MOVED_PERMANENTLY_DEFAULT come codice di risposta. - Convalida la mappa URL.
- Crea la mappa URL del bilanciatore del carico HTTP importando il file YAML. Il nome di questa mappa URL è
web-map-http. - Verifica che la mappa URL sia aggiornata. La mappa URL del bilanciatore del carico HTTP dovrebbe avere un aspetto simile a questo:
- Crea un nuovo proxy HTTP di destinazione o aggiornane uno esistente utilizzando
web-map-httpcome mappa URL. - Crea una regola di forwarding per indirizzare le richieste in entrata al proxy. Il flag
--addressspecificalb-ipv4-1, che è lo stesso indirizzo IP utilizzato per il bilanciatore del carico HTTPS esterno.
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¶meter2=value2 expectedOutputUrl: https://example.com/test/?parameter1=value1¶meter2=value2 expectedRedirectResponseCode: 301
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Se i test vengono superati e il comando restituisce un messaggio di operazione riuscita, salva le modifiche alla mappa URL.
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 prompt:
Url Map [web-map-http] will be overwritten.
Do you want to continue (Y/n)?
Per continuare, premi Y.
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
gcloud compute target-http-proxies create http-lb-proxy \
--url-map=web-map-http \
--global
gcloud compute target-http-proxies update http-lb-proxy \
--url-map=web-map-http \
--global
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
Aggiungi un'intestazione HSTS personalizzata
Quando aggiungi l'intestazione HTTP
Strict-Transport-Security al servizio di backend del bilanciatore del carico HTTPS, il bilanciatore del carico invia l'intestazione personalizzata al client in modo che la volta successiva che il client tenta di accedere all'URL tramite HTTP, il browser reindirizzi la richiesta. Le impostazioni dell'intestazione sono le seguenti:
- Nome intestazione:
Strict-Transport-Security - Valore intestazione:
max-age=31536000; includeSubDomains; preload
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 saperne di più, consulta Creazione di intestazioni personalizzate.
Test del reindirizzamento da HTTP a HTTPS
Prendi nota dell'indirizzo IP prenotato che stai utilizzando 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 prenotato sia 34.98.77.106. L'URL http://34.98.77.106/ reindirizza a https://34.98.77.106/.
Dopo qualche minuto, puoi testare il reindirizzamento eseguendo il seguente 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
Procedure correlate
Per utilizzare Terraform, consulta la scheda Reindirizzamento da HTTP a HTTPS.
Per GKE, fai riferimento ai reindirizzamenti da HTTP a HTTPS nella documentazione di GKE.
Per i bilanciatori del carico delle applicazioni interni, consulta Configurazione del reindirizzamento da HTTP a HTTPS per i bilanciatori del carico delle applicazioni interni.
Per altri tipi di reindirizzamenti, vedi Reindirizzamenti di URL.