Configura un redireccionamiento de HTTP a HTTPS

En este ejemplo, se muestra cómo usar redireccionamientos de URL para redireccionar todas las solicitudes del puerto 80 (HTTP) al puerto 443 (HTTPS).

HTTPS usa TLS (SSL) para encriptar solicitudes y respuestas HTTP, lo que lo hace más seguro y protegido. Un sitio web que usa HTTPS tiene https:// al comienzo de su URL en lugar de http://.

Para balanceadores de cargas existentes

Si ya tienes un balanceador de cargas HTTPS externo (llamado LB1 aquí) que entrega tráfico HTTPS en el puerto 443, debes crear un HTTP externo parcial. balanceador de cargas (llamado LB2) con la siguiente configuración:

  • La misma dirección IP de frontend que usa LB1
  • Un redireccionamiento configurado en el mapa de URL

Este balanceador de cargas HTTP parcial usa la misma dirección IP que tu balanceador de cargas HTTPS y redirecciona las solicitudes HTTP al frontend de HTTPS del balanceador de cargas.

Esta arquitectura se muestra en el siguiente diagrama.

Arquitectura de redireccionamiento de HTTP a HTTPS.
Figura 2. Arquitectura de configuración de redireccionamiento de HTTP a HTTPS

Redirecciona el tráfico al balanceador de cargas de HTTPS

Después de verificar que el balanceador de cargas de HTTPS externo (LB1) funciona, puedes crear el balanceador de cargas de HTTP externo (LB2) parcial con su frontend configurado para redireccionar el tráfico a LB1.

En este ejemplo, se usa el código de respuesta 301. En cambio, puedes usar un código de respuesta diferente.

Para configurar el redireccionamiento con gcloud, debes importar un archivo YAML y asegurarte de que tu proxy HTTP de destino apunte al mapa de URL que redirecciona el tráfico. Si usas Cloud Console, se controla por ti.

Cloud Console no admite los balanceadores de cargas HTTP(S) regionales externos.

gcloud

  1. Crea un archivo YAML /tmp/web-map-http.yaml. En este ejemplo, se usa MOVED_PERMANENTLY_DEFAULT como código de respuesta.
  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. Valida el mapa de URL.
  4. Si las pruebas pasan y el comando genera un mensaje de éxito, guarda los cambios en el mapa de URL.

  5. Crea el mapa de URL del balanceador de cargas HTTP mediante la importación del archivo YAML. El nombre de este mapa de URL es web-map-http.
  6. Si actualizas un mapa de URL existente, aparecerá el siguiente mensaje:

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

    Para continuar, presiona Y.

  7. Verifica que el mapa de URL esté actualizado. El mapa de URL del balanceador de cargas de HTTP debería ser similar al siguiente:
  8. Crea un proxy HTTP de destino nuevo o actualiza uno existente con web-map-http como el mapa de URL.
  9. Crea una regla de reenvío global para enrutar las solicitudes entrantes al proxy. La marca --address especifica lb-ipv4-1, que es la misma dirección IP que se usa para el balanceador de cargas de HTTPS externo.

Prueba el redireccionamiento de HTTP a HTTPS

Ten en cuenta la dirección IP reservada que usas para ambos balanceadores de cargas.

En este ejemplo, supongamos que la dirección IP reservada es 34.98.77.106. La URL http://34.98.77.106/ se redirecciona a https://34.98.77.106/.

Después de unos minutos, puedes ejecutar el siguiente comando curl para probarla.

curl -v http://hostname.com

Resultado de muestra:

* 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