Redirigir las solicitudes HTTP a HTTPS

En este ejemplo se muestra cómo usar redirecciones de mapa de URLs para redirigir todas las solicitudes de HTTP a HTTPS. En este ejemplo se muestra cómo configurar redirecciones mediante los puertos conocidos 80 (para HTTP) y 443 (para HTTPS). Sin embargo, no es obligatorio usar estos números de puerto específicos. Cada regla de reenvío de un balanceador de carga de aplicaciones puede hacer referencia a un único puerto del intervalo 1-65535.

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

Para los nuevos balanceadores de carga de aplicaciones HTTPS

Si vas a crear un balanceador de carga de aplicaciones HTTPS, puedes usar laGoogle Cloud consola para configurar el redireccionamiento de HTTP a HTTPS.

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

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

    Ve a Balanceo de carga (crear balanceador de carga de aplicación externo global).

  2. En Load balancer name (Nombre del balanceador de carga), introduce un nombre.
  3. Haz clic en Configuración de frontend.
  4. En Protocol (Protocolo), selecciona HTTPS (includes HTTP/2) (HTTPS [incluye HTTP/2]).
  5. En Dirección IP, haz clic en Crear dirección IP. Introduce un nombre para la nueva dirección IP estática y haz clic en Reservar.
  6. En Certificate (Certificado), selecciona un certificado SSL.
  7. Para crear la redirección, marca la casilla Habilitar redirección de HTTP a HTTPS.
  8. Haz clic en Listo.
  9. Completa el backend y otras configuraciones necesarias.
  10. Haz clic en Crear.

Para poder seleccionar la casilla, debes elegir el protocolo HTTPS y usar una dirección IP reservada (no efímera).

Casilla de redireccionamiento de HTTP a HTTPS en la consola Google Cloud .
Imagen 1. Casilla de redireccionamiento de HTTP a HTTPS en la Google Cloud consola (haz clic para ampliar)

En función del tipo de backend, siga las instrucciones de la consola que se indican en una de las siguientes guías para completar la configuración: Google Cloud

Si marca la casilla Habilitar redirección de HTTP a HTTPS, se creará automáticamente un balanceador de carga HTTP parcial adicional que consta de un mapa de URLs, una regla de reenvío y un proxy HTTP de destino. Este balanceador de carga HTTP parcial usa la misma dirección IP que tu balanceador de carga HTTPS y redirige las solicitudes HTTP al frontend HTTPS de tu balanceador de carga. Usa 301 Moved Permanently como código de respuesta de redirección predeterminado.

Una vez creado el balanceador de carga HTTPS, puedes ver el balanceador de carga HTTP parcial en la lista de balanceadores de carga, con el sufijo -redirect. Para probar la configuración, siga los pasos que se indican en Probar la redirección de HTTP a HTTPS.

Para balanceadores de carga ya creados

Si ya tienes un balanceador de carga de aplicaciones HTTPS (llamado LB1) que sirve tráfico HTTPS en el puerto 443, debes crear un balanceador de carga de aplicaciones HTTP parcial (llamado LB2) con la siguiente configuración:

  • La misma dirección IP de frontend que usa LB1
  • Una redirección configurada en el mapa de URLs

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

Esta arquitectura se muestra en el siguiente diagrama.

Arquitectura de configuración de redireccionamiento de HTTP a HTTPS.
Imagen 2. Arquitectura de configuración del redireccionamiento de HTTP a HTTPS (haz clic para ampliar).

Redirigir el tráfico a tu balanceador de carga HTTPS

Una vez que hayas verificado que tu balanceador de carga HTTPS (LB1) funciona, puedes crear el balanceador de carga HTTP parcial (LB2) con su frontend configurado para redirigir el tráfico a LB1.

En este ejemplo se usa el código de respuesta 301. En su lugar, puedes usar otro código de respuesta.

Para configurar la redirección con gcloud, debes importar un archivo YAML y asegurarte de que tu proxy HTTP de destino apunte al mapa de URLs que redirige el tráfico. Si usas la Google Cloud consola, se gestiona automáticamente.

Los balanceadores de carga de aplicación externos regionales no se admiten en la consola de Google Cloud .

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

    Si las pruebas se superan y el comando muestra un mensaje de éxito, guarda los cambios en el mapa de URLs.

  5. Crea el mapa de URLs del balanceador de carga HTTP importando el archivo YAML. El nombre de este mapa de URLs es web-map-http.
  6.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    Si vas a actualizar un mapa de URLs, aparecerá el siguiente mensaje:

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

    Para continuar, pulsa S.

  7. Verifica que el mapa de URLs se haya actualizado. El mapa de URLs de tu balanceador de carga HTTP debería tener un aspecto similar a este:
  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 o actualiza uno que ya tengas con web-map-http como mapa de URLs.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    O BIEN
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. Crea una regla de reenvío para dirigir 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 carga 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
           

Añadir un encabezado HSTS personalizado

Cuando añades el encabezado HTTP Strict-Transport-Security al servicio de backend de tu balanceador de carga HTTPS, el balanceador de carga 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 redirija la solicitud. Los ajustes del encabezado son los siguientes:

  • Nombre del encabezado: Strict-Transport-Security
  • Valor del encabezado: max-age=31536000; includeSubDomains; preload

Para añadir 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 Crear encabezados personalizados.

Probar el redireccionamiento de HTTP a HTTPS

Anota la dirección IP reservada que estás usando para ambos balanceadores de carga.

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/ redirige a https://34.98.77.106/.

Después de unos minutos, puedes probarlo ejecutando el siguiente comando curl.

curl -v http://hostname.com

Ejemplo de salida:

* 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