Redirecciona solicitudes HTTP a HTTPS

En este ejemplo, se muestra cómo usar redireccionamientos de mapa de URL para redireccionar todas las solicitudes de HTTP a HTTPS. En este ejemplo, se muestra cómo configurar redireccionamientos mediante los puertos conocidos 80 (para HTTP) y 443 (para HTTPS). Sin embargo, no es necesario que uses estos números de puerto específicos. Cada regla de reenvío para un balanceador de cargas de aplicaciones puede hacer referencia a un puerto único del 1 al 65535.

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 de aplicaciones HTTPS nuevos

Si creas un balanceador de cargas HTTPS nuevo, puedes usar la consola de Google Cloud para configurar un redireccionamiento de HTTP a HTTPS.

Cuando crees el frontend del balanceador de cargas de HTTPS, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página de configuración del balanceador de cargas.

    Ir al balanceo de cargas (crear un balanceador de cargas de aplicaciones externo global)

  2. En Nombre del balanceador de cargas, ingresa un nombre.
  3. Haz clic en Configuración de frontend.
  4. Para Protocolo, selecciona HTTPS (incluye HTTP/2).
  5. En Dirección IP, haz clic en Crear dirección IP. Proporciona un nombre para la dirección IP estática nueva y haz clic en Reservar.
  6. En Certificado, selecciona un certificado SSL.
  7. Para crear el redireccionamiento, selecciona la casilla de verificación Habilitar el redireccionamiento HTTP a HTTPS.
  8. Haz clic en Listo.
  9. Completa el backend y otras opciones de configuración necesarias.
  10. Haz clic en Crear.

Debes seleccionar el protocolo HTTPS y usar una dirección IP reservada (no efímera) para poder seleccionar la casilla de verificación.

Casilla de verificación de redireccionamiento de HTTP a HTTPS en la consola de Google Cloud.
Figura 1. Casilla de verificación de redireccionamiento de HTTP a HTTPS en la consola de Google Cloud (haz clic para ampliar).

Según el tipo de backend, usa las instrucciones de la consola de Google Cloud de una de las siguientes guías para completar esta configuración:

Cuando habilitas la casilla de verificación Habilita el redireccionamiento de HTTP a HTTPS, se crea de forma automática un balanceador de cargas de HTTP parcial adicional que consta de un mapa de URL, una regla de reenvío y un proxy HTTP de destino. Este balanceador de cargas de HTTP parcial usa la misma dirección IP que tu balanceador de cargas de HTTPS y redirecciona las solicitudes HTTP al frontend de HTTPS del balanceador de cargas. Usa 301 Moved Permanently como el código de respuesta de redireccionamiento predeterminado.

Después de crear el balanceador de cargas de HTTPS, puedes ver el balanceador de cargas de HTTP parcial en la lista de balanceadores de cargas, con el sufijo -redirect. Prueba la configuración mediante los pasos que se indican en Prueba el redireccionamiento de HTTP a HTTPS.

Para balanceadores de cargas existentes

Si ya tienes un balanceador de cargas de aplicaciones HTTPS (llamado LB1 aquí) que entrega tráfico HTTPS en el puerto 443, debes crear unHTTP parcial. Balanceador de cargas de aplicaciones (llamado LB2 aquí) 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 (haz clic para ampliar).

Redirecciona el tráfico al balanceador de cargas de HTTPS

Después de verificar que el balanceador de cargas de HTTPS (LB1) funciona, puedes crear el balanceador de cargas de HTTP parcial (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 la consola de Google Cloud, tú lo controlas.

La consola de Google Cloud no admite los balanceadores de cargas de aplicaciones externos regionales.

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.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    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.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    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.        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 proxy HTTP de destino nuevo o actualiza uno existente con web-map-http como el mapa de URL.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    O
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. 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.
  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
           

Agrega un encabezado HSTS personalizado

Cuando agregas el encabezado Strict-Transport-Security de HTTP al servicio de backend de tu balanceador de cargas de HTTPS, el balanceador de cargas envía el encabezado personalizado al cliente para que la próxima vez que el cliente intente acceder a la URL a través de HTTP, el navegador redireccione la solicitud. La configuración del encabezado es la siguiente:

  • Nombre del encabezadoStrict-Transport-Security
  • Valor del encabezadomax-age=31536000; includeSubDomains; preload

Para agregar el encabezado personalizado a la configuración del servicio de backend, usa la marca --custom-response-header.

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

Para obtener más información, consulta Crea encabezados personalizados.

Prueba el redireccionamiento de HTTP a HTTPS

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

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

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