Configurer la redirection HTTP vers HTTPS

Cet exemple montre comment utiliser des redirections d'URL pour rediriger toutes les requêtes du port 80 (HTTP) vers le port 443 (HTTPS).

HTTPS utilise TLS (SSL) pour chiffrer les requêtes et les réponses HTTP, ce qui les rend plus sûres et plus sécurisées. L'URL d'un site Web utilisant HTTPS commence par https:// au lieu de http://.

Architecture

Pour rediriger le trafic HTTP vers HTTPS, procédez comme suit :

  1. (Condition préalable) Vous devez disposer d'un équilibreur de charge HTTPS externe (appelé ici LB1) qui diffuse déjà du trafic HTTPS sur le port 443.
  2. Créez un équilibreur de charge HTTP externe partiel (appelé LB2). L'équilibreur de charge LB2 est configuré de la manière suivante :

    • Aucun backend
    • Adresse IP frontend identique à LB1
    • Redirection configurée dans le mappage d'URL

Cette architecture est illustrée par le schéma suivant.

Configuration de la redirection HTTP vers HTTPS (cliquez pour agrandir)
Configuration de la redirection HTTP vers HTTPS

Étape préalable : Configurer un équilibreur de charge HTTPS externe (LB1)

Si vous n'avez pas encore configuré d'équilibreur de charge HTTPS externe, consultez l'un des guides suivants pour terminer cette configuration. Sélectionnez la procédure correspondant à votre type de backend :

Si vous disposez déjà d'un équilibreur de charge HTTPS opérationnel, passez directement à la section Rediriger le trafic vers l'équilibreur de charge HTTPS.

Rediriger le trafic vers l'équilibreur de charge HTTPS

Après avoir vérifié que l'équilibreur de charge HTTPS externe (LB1) fonctionne, vous pouvez créer l'équilibreur de charge HTTP externe partiel (LB2) avec une interface configurée pour rediriger le trafic vers LB1.

Cet exemple utilise le code de réponse 301. Vous pouvez également utiliser un autre code de réponse.

Pour configurer la redirection avec gcloud, vous devez importer un fichier YAML et vous assurer que votre proxy HTTP cible pointe vers le mappage d'URL qui redirige le trafic. Si vous utilisez Cloud Console, cette opération est effectuée automatiquement.

Console

Démarrer la configuration

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Dans la section Équilibrage de charge HTTP(S), cliquez sur Démarrer la configuration.
  3. Sélectionnez D'Internet vers mes VM, puis cliquez sur Continuer.
  4. Pour le nom de l'équilibreur de charge, saisissez une valeur similaire à http-redirect.
  5. Laissez la fenêtre ouverte pour continuer.

Ignorer la configuration du backend

  1. Ignorez la section Configuration du backend.
    Cet équilibreur de charge n'a pas besoin d'un backend.

Configurer la redirection dans le mappage d'URL

  1. Dans la colonne de gauche de la page, cliquez sur Règles d'hôte et de chemin d'accès.
  2. Sélectionnez Règle d'hôte et de chemin d'accès avancée (redirection et réécriture d'URL).
  3. Sous Action, sélectionnez Rediriger le client vers un autre hôte/chemin d'accès.
  4. Laissez le champ Redirection par préfixe vide.
  5. Sous Redirection de chemin, sélectionnez Redirection par préfixe.
  6. Laissez le champ Valeur du chemin d'accès vide.
  7. Sous Rediriger le code de réponse, sélectionnez 301 - Moved Permanently.
  8. Sous Redirection HTTPS, sélectionnez Activer.
  9. Cliquez sur OK.
  10. Laissez la page de configuration de l'équilibreur de charge ouverte pour continuer.

Configurer la règle de transfert HTTP avec la même adresse IP que celle utilisée dans LB1

  1. Sur la page de configuration de l'équilibreur de charge, cliquez sur Configuration du frontend.
  2. Définissez Protocole sur HTTP.
  3. Dans le champ Adresse IP, définissez la même adresse IP que celle utilisée pour votre équilibreur de charge HTTPS.
  4. Assurez-vous que Port est défini sur 80 pour autoriser le trafic HTTP.
  5. Cliquez sur OK.
  6. Laissez la fenêtre ouverte pour continuer.

Vérifier la configuration

  1. Dans le panneau de gauche, cliquez sur Vérification et finalisation.
  2. Comparez vos paramètres à ce que vous aviez l'intention de créer.
  3. Si tout semble correct, cliquez sur Créer.

gcloud

  1. Créez un fichier YAML /tmp/web-map-http.yaml. Cet exemple utilise MOVED_PERMANENTLY_DEFAULT comme code de réponse.

    kind: compute#urlMap
    name: web-map-http
    defaultUrlRedirect:
      redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
      httpsRedirect: True
    tests:
    - description: Test with no query parameters
      host: foobar
      path: /test/
      expectedOutputUrl: https://foobar/test/
      expectedRedirectResponseCode: 301
    - description: Test with query parameters
      host: foobar
      path: /test/?parameter1=value1&parameter2=value2
      expectedOutputUrl: https://foobar/test/?parameter1=value1&parameter2=value2
      expectedRedirectResponseCode: 301
    
  2. Validez le mappage d'URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Si les tests réussissent et que le résultat de la commande est positif, enregistrez les modifications dans le mappage d'URL.

  3. Créez le mappage d'URL de l'équilibreur de charge HTTP en important le fichier YAML. Le nom de ce mappage d'URL est web-map-http.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

    Si vous mettez à jour un mappage d'URL existant, l'invite suivante apparaît :

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

    Pour continuer, appuyez sur Y.

  4. Vérifiez que le mappage d'URL est mis à jour. Le mappage d'URL de votre équilibreur de charge HTTP doit se présenter comme suit :

    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
    
  5. Créez un proxy HTTP cible ou mettez à jour un proxy HTTP existant en utilisant web-map-http comme mappage d'URL.

    gcloud compute target-http-proxies create http-lb-proxy \
       --url-map=web-map-http \
       --global
    

    OR

    gcloud compute target-http-proxies update http-lb-proxy \
       --url-map=web-map-http \
       --global
    
  6. Créez une règle de transfert globale pour acheminer les requêtes entrantes vers le proxy. L'option --address spécifie la valeur lb-ipv4-1, qui correspond à la même adresse IP que celle utilisée pour l'équilibreur de charge HTTPS externe.

    gcloud compute forwarding-rules create http-content-rule \
       --address=lb-ipv4-1 \
       --global \
       --target-http-proxy=http-lb-proxy \
       --ports=80
    

Lorsque vous avez terminé, Cloud Console affiche deux équilibreurs de charge, comme suit.

Les deux équilibreurs de charge

Cloud Console affiche des informations sur votre équilibreur de charge web-map-http comme suit.

Équilibreur de charge HTTP

Ajouter un en-tête personnalisé

Vous pouvez également ajouter l'en-tête HTTP Strict-Transport-Security au service de backend de votre équilibreur de charge HTTPS, comme suit :

  • Nom de l'en-tête : Strict-Transport-Security
  • Valeur d’en-tête : max-age=31536000; includeSubDomains; preload

Ce paramètre envoie l'en-tête personnalisé au client de sorte que le navigateur effectue la redirection la prochaine fois que le client tente d'accéder à l'URL via HTTP.

Pour ajouter l'en-tête personnalisé à la configuration du service de backend, utilisez l'option --custom-response-header, comme indiqué ici :

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

Pour en savoir plus, consultez la page Créer des en-têtes personnalisés.

Tester la redirection de HTTP vers HTTPS

Notez l'adresse IP réservée que vous utilisez pour les deux équilibreurs de charge.

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

Dans cet exemple, supposons que l'adresse IP réservée est 34.98.77.106. L'URL http://34.98.77.106/ redirige vers https://34.98.77.106/.

Au bout de quelques minutes, vous pouvez effectuer un test en exécutant la commande curl suivante.

curl -v http://hostname.com

Exemple de résultat :

* 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