Redirecionar solicitações HTTP para HTTPS

Neste exemplo, mostramos como usar redirecionamentos do mapa de URL para redirecionar todas as solicitações de HTTP para HTTPS. Este exemplo mostra como configurar redirecionamentos usando as portas conhecidas 80 (para HTTP) e 443 (para HTTPS). No entanto, não é necessário usar esses números de porta específicos. Cada regra de encaminhamento para um balanceador de carga de aplicativo pode ter referência a uma única porta de 1 a 65535.

O HTTPS usa o TLS (SSL) para criptografar solicitações e respostas HTTP, tornando-o mais seguro. Um site que usa HTTPS tem https:// no início do URL, e não http://.

Para novos balanceadores de carga de aplicativo HTTPS

Se você estiver criando um novo balanceador de carga de aplicativo HTTPS, use o console do Google Cloud para configurar um redirecionamento de HTTP para HTTPS.

Ao criar o front-end do balanceador de carga, use as seguintes etapas:

  1. No Console do Google Cloud, acesse a página de configuração do balanceador de carga.

    Acessar "Balanceamento de carga (criar um balanceador de carga de aplicativo externo global)

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

É necessário selecionar o protocolo HTTPS e usar um endereço IP reservado (não temporário) para poder marcar a caixa de seleção.

Caixa de seleção de redirecionamento de HTTP para HTTPS no Console do Google Cloud.
Figura 1. Caixa de seleção de redirecionamento HTTP para HTTPS no console do Google Cloud (clique para ampliar).

Dependendo do tipo de back-end, use as instruções do Console do Google Cloud de um dos guias a seguir para concluir esta configuração:

Marcar a caixa de seleção Ativar redirecionamento HTTP para HTTPS cria automaticamente mais um balanceador de carga HTTP parcial, que consiste em um mapa de URL, uma regra de encaminhamento e um proxy HTTP de destino. Esse balanceador de carga HTTP parcial usa o mesmo endereço IP que seu balanceador de carga HTTPS e redireciona solicitações HTTP para o front-end HTTPS do balanceador de carga. Ele usa 301 Moved Permanently como o código de resposta de redirecionamento padrão.

Depois que o balanceador de carga HTTPS é criado, é possível ver o balanceador de carga HTTP parcial na lista de balanceadores de carga, com um sufixo -redirect. Teste sua configuração usando as etapas em Como testar o redirecionamento de HTTP para HTTPS.

Para balanceadores de carga atuais

Se você já tiver um balanceador de carga de aplicativo HTTPS (chamado aqui de LB1) que atenda ao tráfego HTTPS na porta 443, crie um aplicativo HTTP parcial Balanceador de carga, chamado aqui de LB2, com a seguinte configuração:

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

Esse balanceador de carga HTTP parcial usa o mesmo endereço IP que o balanceador de carga HTTPS e redireciona solicitações HTTP para o front-end HTTPS do balanceador de carga.

Veja essa arquitetura no diagrama a seguir.

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

Como redirecionar o tráfego para o balanceador de carga HTTPS

Depois de verificar se o balanceador de carga HTTPS (LB1) está funcionando, é possível criar o balanceador de carga HTTP (LB2) parcial com o front-end configurado para redirecionar o tráfego para LB1.

Neste exemplo, usamos o código de resposta 301. Em vez disso, é possível usar um código de resposta diferente.

Para configurar o redirecionamento com gcloud, importe um arquivo YAML e verifique se o proxy HTTP de destino aponta para o mapa de URL que redireciona o tráfego. Se você estiver usando o Console do Google Cloud, isso é ideal para você.

Os balanceadores de carga de aplicativo externos regionais não são compatíveis com o console do Google Cloud.

gcloud

  1. Crie um arquivo YAML /tmp/web-map-http.yaml. Este exemplo usa MOVED_PERMANENTLY_DEFAULT como o 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 URL.
  4.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    Se os testes forem aprovados e o comando resultar em uma mensagem de êxito, salve as alterações no mapa de URL.

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

    Se você estiver atualizando um mapa de URL existente, o seguinte prompt será exibido:

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

    Para continuar, pressione Y.

  7. Verifique se o mapa de URLs está atualizado. O mapa de URLs do balanceador de carga HTTP se parecerá com 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 URL.
  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 as solicitações recebidas para o proxy. A sinalização --address especifica 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
           

Adicionar um cabeçalho HSTS personalizado

Quando você adiciona o cabeçalho Strict-Transport-Security HTTP ao serviço de back-end do balanceador de carga HTTPS, o balanceador de carga envia o cabeçalho personalizado para o cliente. Assim, na próxima vez que o cliente tentar acessar o URL via HTTP, o navegador redirecionará a solicitação. As configurações do cabeçalho são estas:

  • 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 sinalização --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 Como criar cabeçalhos personalizados.

Como testar o redirecionamento de HTTP para HTTPS

Anote o endereço IP reservado que você está usando nos dois balanceadores de carga.

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

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

Depois de alguns minutos, teste isso executando o comando curl a seguir.

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