Distribuzione di contenuti HTTP e HTTPS sullo stesso dominio pubblicato

È comune inviare contenuti HTTP e HTTPS sullo stesso nome host quando si utilizza Cloud CDN. Sebbene molti browser impongano l'uso del protocollo Transport Layer Security (TLS) e non consentano la consegna di contenuti non protetti, esistono comunque casi d'uso in cui la consegna non sicura e la consegna sicura devono essere consentite sullo stesso nome host. Questo articolo illustra come ottenere questa funzionalità utilizzando Cloud CDN.

Sfida

Quando un client stabilisce una connessione con un server perimetrale di CDN, viene negoziato il protocollo di consegna dell'utente finale. La maggior parte delle piattaforme CDN convenzionali indirizza il traffico al rispettivo spazio di distribuzione:

  1. Indirizzare a un nome di dominio appartenente alla rete CDN utilizzando un record CNAME DNS.
  2. Routing del traffico a un sottoinsieme di server che supportano la negoziazione TLS per quel nome di dominio.

Poiché Cloud CDN si integra con Cloud Load Balancing, l'approccio di Cloud CDN è diverso da quello delle CDN convenzionali. Cloud CDN utilizza l'indirizzo IP Anycast dell'Application Load Balancer esterno. Quando configuri Cloud CDN, hai un indirizzo IP specifico a cui indirizzare il traffico. Ciò richiede un costrutto di record A (per IPv4) e/o AAAA (per IPv6) nel record DNS, anziché un record CNAME con un valore nome host.

Per impostazione predefinita, durante la configurazione del frontend del bilanciatore del carico, Google Cloud assegna in modo dinamico un indirizzo IP temporaneo. Poiché devi configurare le configurazioni HTTP e HTTPS separatamente, potresti avere due indirizzi IP per l'istanza Cloud CDN. Poiché lo stesso indirizzo IP del record A o AAAA sia per HTTP sia per HTTPS, non è possibile gestire correttamente questo caso nel DNS.

Soluzione

Quando pubblichi contenuti sicuri e non protetti sullo stesso nome host, il client viene indirizzato a un server perimetrale che può negoziare HTTP o HTTPS. Per far funzionare questa operazione con Cloud CDN, puoi prenotare un indirizzo IP e associare l'indirizzo IP riservato alla configurazione del frontend HTTP e HTTPS nell'Application Load Balancer esterno.

HTTP e HTTPS nello stesso dominio
HTTP e HTTPS nello stesso dominio

Nel diagramma:

  • le richieste in entrata per www.example.com provengono da client che utilizzano HTTP/2, HTTPS e HTTP.
  • Sono riservati due indirizzi IP, uno per IPv4 e uno per IPv6:

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • Questi due indirizzi IP sono associati a www.example.com in Cloud DNS.

  • Quando configuri il bilanciatore del carico delle applicazioni esterno, la configurazione del frontend include quattro regole di forwarding che utilizzano gli indirizzi IP riservati:

    Nome Protocollo IP:Porta
    IPv4-http HTTP 34.95.111.204:80
    IPv4-https HTTPS 34.95.111.204:443
    IPv6-http HTTP [2600:1901:0:b13e::]:80
    IPv6-https HTTPS [2600:1901:0:b13e::]:443
  • Per i fallimenti della cache di Cloud CDN, il bilanciatore del carico distribuisce le richieste alle origini del backend, in base alle impostazioni definite nella mappa URL del bilanciatore del carico.

Passaggio 1: prenota un indirizzo IP esterno globale

Crea un indirizzo IPv4 o IPv6 (o entrambi). Per supportare gli indirizzi IPv4 e IPv6, è necessario creare un indirizzo IPv4 e un indirizzo IPv6.

Nel record DNS,crea un record A (o AAAA) per indirizzare il traffico a questo indirizzo IP riservato.

Console

  1. Nella console Google Cloud, vai alla pagina Indirizzi IP esterni.

    Vai alla pagina Indirizzi IP esterni

  2. Fai clic su Prenota indirizzo statico per prenotare un indirizzo IPv4.
  3. Assegna un nome pari a ipv4-address.
  4. Imposta il livello di rete su Premium.
  5. Imposta la versione IP su IPv4.
  6. Imposta il Tipo su Globale.
  7. Fai clic su Prenota.

Il bilanciatore del carico utilizza il networking del livello Premium, come richiesto quando è abilitato Cloud CDN.

gcloud

gcloud compute addresses create ipv4-address \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Prendi nota dell'indirizzo IPv4 riservato:

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

Ripeti questo passaggio per IPv6.

Per maggiori informazioni, consulta Prenotare un nuovo indirizzo IP esterno statico.

Passaggio 2: associa l'indirizzo IP riservato al bilanciatore del carico

Questa sezione mostra come assegnare gli indirizzi IP al bilanciatore del carico. Le istruzioni end-to-end per la configurazione del bilanciatore del carico non rientrano nell'ambito di questo articolo. Per un esempio di configurazione, consulta Creazione di un bilanciatore del carico HTTPS.

La sezione di configurazione frontend consente di selezionare il protocollo utilizzato tra il client e il bilanciatore del carico.

In questo esempio, vengono utilizzati sia HTTP che HTTPS tra il client e il bilanciatore del carico, pertanto sono necessarie una o più risorse del certificato SSL per configurare il proxy.

Console

Configurazione della regola di forwarding HTTP

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai alla pagina Bilanciamento del carico

  2. Seleziona il bilanciatore del carico e fai clic su Modifica.
  3. Nel riquadro a sinistra, fai clic su Configurazione frontend.
  4. Nel campo Nome, inserisci ipv4-http.
  5. Nel campo Protocollo, seleziona HTTP.
  6. Imposta Versione IP su IPv4.
  7. In Indirizzo IP, seleziona ipv4-address, che hai creato in precedenza.
  8. Assicurati che la Porta sia impostata su 80, per consentire il traffico HTTP.
  9. Fai clic su Fine.

Configurazione della regola di forwarding HTTPS

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai alla pagina Bilanciamento del carico

  2. Seleziona il bilanciatore del carico e fai clic su Modifica.
  3. Nel riquadro a sinistra, fai clic su Configurazione frontend.
  4. Nel campo Nome, inserisci ipv4-https.
  5. Nel campo Protocollo, seleziona HTTPS.
  6. Imposta Versione IP su IPv4.
  7. In Indirizzo IP, seleziona ipv4-address, che hai creato in precedenza.
  8. Assicurati che la Porta sia impostata su 443, per consentire il traffico HTTP.
  9. Fai clic sull'elenco a discesa Certificato.
    1. Se disponi già di una risorsa del certificato SSL autogestita che vuoi utilizzare come certificato SSL principale, selezionala dal menu a discesa.
    2. Altrimenti, seleziona Crea un nuovo certificato.
    3. Seleziona Carica il mio certificato o Crea certificato gestito da Google.
    4. Se hai selezionato Carica il mio certificato, completa questi passaggi.
      1. Inserisci il Nome www-ssl-cert.
      2. Nei campi appropriati, carica il tuo Certificato di chiave pubblica (file .crt), catena di certificati (file .csr) e Chiave privata (file .key).
      3. Fai clic su Crea.
    5. Se scegli Crea certificato gestito da Google, inserisci un Dominio.
    6. Per aggiungere risorse di certificato oltre alla risorsa del certificato SSL principale:
      1. Fai clic su Aggiungi certificato.
      2. Seleziona un certificato dall'elenco Certificati oppure fai clic su Crea un nuovo certificato e segui le istruzioni riportate sopra.
  10. Fai clic su Fine.

Ripeti questi passaggi per IPv6.

Esamina e finalizza

  1. Nel riquadro a sinistra, fai clic su Rivedi e finalizza.
  2. Confronta le tue impostazioni con ciò che volevi creare.
  3. Se è tutto a posto, fai clic su Aggiorna.

gcloud

  1. Crea un proxy HTTP di destinazione per instradare le richieste alla mappa degli URL.

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. Crea un proxy HTTPS di destinazione per instradare le richieste alla mappa degli URL. Il proxy è la parte del bilanciatore del carico che contiene il certificato SSL per il bilanciamento del carico HTTPS, pertanto caricherai anche il certificato in questo passaggio.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. Crea due regole di forwarding globali per instradare le richieste in entrata al proxy, una per ciascuno degli indirizzi IP che hai creato.

    • Per un bilanciatore del carico delle applicazioni esterno globale, utilizza il comando gcloud CLI con load-balancing-scheme=EXTERNAL_MANAGED. Questa impostazione offre funzionalità avanzate di gestione del traffico.
    • Per un bilanciatore del carico delle applicazioni classico, utilizza load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create ipv4-http \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    
    gcloud compute forwarding-rules create ipv4-https \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address  \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    

Dopo aver creato le regole di forwarding globali, la propagazione della configurazione in tutto il mondo può richiedere diversi minuti.

Passaggio 3: crea un record A o AAAA nel file di zona DNS

L'ultimo passaggio del processo consiste nella creazione di un record A e/o AAAA nel file della zona DNS in modo che punti a Cloud CDN, dove il valore del tuo nome host risponderà con gli indirizzi IP prenotati che hai assegnato sul bilanciatore del carico.

Ora puoi gestire sia HTTP che HTTPS sullo stesso nome host tramite Cloud CDN.

Facoltativo: reindirizzamento da HTTP a HTTPS

Se vuoi reindirizzare le richieste HTTP al bilanciatore del carico HTTPS, devi aggiungere un bilanciatore del carico HTTP parziale con frontend, ma senza backend. Il frontend riceve le richieste e le reindirizza al bilanciatore del carico HTTPS. Per farlo, utilizza quanto segue:

  • Una regola di forwarding con lo stesso indirizzo IP esterno riservato utilizzato dal bilanciatore del carico HTTPS, come mostrato in questa pagina.
  • Un proxy HTTP di destinazione, come mostrato in questa pagina.
  • Una mappa URL che reindirizza il traffico al bilanciatore del carico HTTPS.

Richiedere assistenza

Se hai domande su Google Cloud e Cloud CDN, contatta il team di vendita di Google Cloud o contatta il canale Slack della community di Google Cloud e pubblica una nota nel canale #cloud-cdn.

Che cosa succede dopo?