Redirecione pedidos HTTP para HTTPS

Este exemplo mostra como usar redirecionamentos do mapa de URLs para redirecionar todos os pedidos de HTTP para HTTPS. Este exemplo mostra como configurar redirecionamentos através das portas conhecidas 80 (para HTTP) e 443 (para HTTPS). No entanto, não tem de usar estes números de porta específicos. Cada regra de encaminhamento para um Application Load Balancer pode referenciar uma porta única de 1 a 65535.

O HTTPS usa TLS (SSL) para encriptar pedidos e respostas HTTP, o que o torna mais seguro. Um Website que usa HTTPS tem https:// no início do respetivo URL em vez de http://.

Para novos balanceadores de carga de aplicações HTTPS

Se estiver a criar um novo Application Load Balancer HTTPS, pode usar a Google Cloud consola para configurar um redirecionamento de HTTP para HTTPS.

Ao criar o front-end do balanceador de carga, siga estes passos:

  1. Na Google Cloud consola, aceda à página de configuração do equilibrador de carga.

    Aceda a Balanceamento de carga (crie um balanceador de carga de aplicações externo global)

  2. Em Nome do balanceador de carga, introduza um nome.
  3. Clique em Configuração do front-end.
  4. Para Protocolo, selecione HTTPS (inclui HTTP/2).
  5. Para Endereço IP, clique em Criar endereço IP. Introduza um nome para o novo endereço IP estático e clique em Reservar.
  6. Para Certificado, selecione um certificado SSL.
  7. Para criar o redirecionamento, selecione a caixa de verificação Ativar redirecionamento de HTTP para HTTPS.
  8. Clique em Concluído.
  9. Conclua o back-end e outras configurações necessárias.
  10. Clique em Criar.

Tem de selecionar o protocolo HTTPS e usar um endereço IP reservado (não efémero) para poder selecionar a caixa de verificação.

Caixa de verificação de redirecionamento de HTTP para HTTPS na consola Google Cloud .
Figura 1. Caixa de verificação de redirecionamento de HTTP para HTTPS na Google Cloud consola (clique para aumentar).

Consoante o tipo de back-end, use as instruções da consola Google Cloud de um dos seguintes guias para concluir esta configuração:

A seleção da caixa de verificação Ativar redirecionamento de HTTP para HTTPS cria automaticamente um balanceador de carga HTTP parcial adicional composto por um mapa de URLs, uma regra de encaminhamento e um proxy HTTP de destino. Este balanceador de carga HTTP parcial usa o mesmo endereço IP que o seu balanceador de carga HTTPS e redireciona os pedidos HTTP para o frontend HTTPS do seu balanceador de carga. Usa 301 Moved Permanently como o código de resposta de redirecionamento predefinido.

Depois de criar o balanceador de carga HTTPS, pode ver o balanceador de carga HTTP parcial na lista de balanceadores de carga, com o sufixo -redirect. Teste a configuração seguindo os passos descritos em Testar o redirecionamento de HTTP para HTTPS.

Para balanceadores de carga existentes

Se já tiver um Application Load Balancer HTTPS (denominado aqui LB1) que esteja a publicar tráfego HTTPS na porta 443, tem de criar um Application Load Balancer HTTP parcial (denominado aqui LB2) com a seguinte configuração:

  • O mesmo endereço IP de front-end usado pelo LB1
  • Um redirecionamento configurado no mapa de URLs

Este balanceador de carga HTTP parcial usa o mesmo endereço IP que o seu balanceador de carga HTTPS e redireciona os pedidos HTTP para o front-end HTTPS do seu balanceador de carga.

Esta arquitetura é apresentada no diagrama seguinte.

Arquitetura de configuração de redirecionamento de HTTP para HTTPS.
Figura 2. Arquitetura de configuração de redirecionamento de HTTP para HTTPS (clique para aumentar).

Redirecionar tráfego para o balanceador de carga HTTPS

Depois de verificar que o balanceador de carga HTTPS (LB1) está a funcionar, pode criar o balanceador de carga HTTP parcial (LB2) com o respetivo front-end configurado para redirecionar o tráfego para o LB1.

Este exemplo usa o código de resposta 301. Em alternativa, pode usar um código de resposta diferente.

Para configurar o redirecionamento com gcloud, tem de importar um ficheiro YAML e certificar-se de que o proxy HTTP de destino aponta para o mapa de URLs que redireciona o tráfego. Se estiver a usar a Google Cloud consola, esta ação é processada automaticamente.

Os balanceadores de carga de aplicações externos regionais não são suportados na Google Cloud consola.

gcloud

  1. Crie um ficheiro YAML /tmp/web-map-http.yaml. Este exemplo usa MOVED_PERMANENTLY_DEFAULT como código de resposta.
  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. Valide o mapa de URLs.
  4.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    Se os testes forem aprovados e o comando gerar uma mensagem de êxito, guarde as alterações no mapa de URLs.

  5. Crie o mapa de URLs do balanceador de carga de HTTP importando o ficheiro YAML. O nome deste mapa de URLs é web-map-http.
  6.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    Se estiver a atualizar um mapa de URLs existente, é apresentado o seguinte comando:

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

    Para continuar, prima Y.

  7. Verifique se o mapa de URLs está atualizado. O mapa de URLs do balanceador de carga HTTP deve ter um aspeto semelhante 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. Crie um novo proxy HTTP de destino ou atualize um proxy HTTP de destino existente, usando web-map-http como o mapa de URLs.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    OU
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. Crie uma regra de encaminhamento para encaminhar pedidos recebidos para o proxy. A flag --address especifica o endereço IP lb-ipv4-1, que é o mesmo endereço IP usado para o 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
           

Adicione um cabeçalho HSTS personalizado

Quando adiciona o cabeçalho HTTP Strict-Transport-Security ao serviço de back-end do balanceador de carga HTTPS, o balanceador de carga envia o cabeçalho personalizado ao cliente para que, da próxima vez que o cliente tentar aceder ao URL através de HTTP, o navegador redirecione o pedido. As definições do cabeçalho são as seguintes:

  • Nome do cabeçalho: Strict-Transport-Security
  • Valor do cabeçalho: max-age=31536000; includeSubDomains; preload

Para adicionar o cabeçalho personalizado à configuração do serviço de back-end, use a 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'

Para mais informações, consulte o artigo Criar cabeçalhos personalizados.

Testar o redirecionamento de HTTP para HTTPS

Tenha em atenção o endereço IP reservado que está a usar para ambos os balanceadores de carga.

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

Neste exemplo, vamos supor que o endereço IP reservado é 34.98.77.106. O URL http://34.98.77.106/ redireciona para https://34.98.77.106/.

Após alguns minutos, pode testar esta situação executando o seguinte comando curl.

curl -v http://hostname.com

Exemplo de saída:

* 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