Redirecionar solicitações HTTP para HTTPS

Neste exemplo, você verá como usar redirecionamentos de URL para redirecionar todas as solicitações da porta 80 (HTTP) para a porta 443 (HTTPS).

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 balanceadores de carga atuais

Se você já tiver um balanceador de carga HTTPS externo (chamado aqui de LB1) que esteja exibindo tráfego HTTPS na porta 443, precisará criar um balanceador de carga HTTP externo parcial (chamado aqui de LB2) com a configuração a seguir:

  • 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 de HTTP para HTTPS

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

Depois de verificar se o balanceador de carga HTTPS (LB1) externo está funcionando, é possível criar o balanceador de carga HTTP externo (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 HTTP(S) externos regionais não são suportados no 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. 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. 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. Crie um novo proxy HTTP de destino ou atualize um proxy HTTP de destino existente usando web-map-http como o mapa de URL.
  9. 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.

Como testar o redirecionamento de HTTP para HTTPS

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

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