Cette page explique comment configurer une redirection HTTP vers HTTPS pour l'équilibreur de charge d'application classique. Cette page est réservée aux équilibreurs de charge d'application classiques. Si vous utilisez un équilibreur de charge en mode différent, consultez l'une des pages suivantes :
Cet exemple montre comment utiliser les redirections de mappage d'URL pour rediriger toutes les requêtes HTTP vers HTTPS. Cet exemple montre comment configurer des redirections à l'aide des ports connus 80 (pour HTTP) et 443 (pour HTTPS). Toutefois, vous n'êtes pas obligé d'utiliser ces numéros de port spécifiques. Chaque règle de transfert d'un équilibreur de charge d'application peut référencer un port unique compris entre 1 et 65 535.
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://
.
Pour les nouveaux équilibreurs de charge d'application HTTPS
Si vous créez un équilibreur de charge d'application HTTPS, vous pouvez utiliser la console Google Cloud pour configurer une redirection HTTP vers HTTPS.
Lors de la création de l'interface de l'équilibreur de charge, procédez comme suit :
- Dans Google Cloud Console, accédez à la page de configuration de l'équilibreur de charge.
Accéder à la page Équilibrage de charge (créer un équilibreur de charge d'application classique)
- Dans le champ Nom de l'équilibreur de charge, saisissez un nom.
- Cliquez sur Configuration de l'interface.
- Sous Protocol (Protocole), sélectionnez HTTPS (includes HTTP/2) (HTTPS (y compris HTTP/2).
- Pour Adresse IP, cliquez sur Créer une adresse IP. Saisissez un nom pour la nouvelle adresse IP statique et cliquez sur Réserver.
- Pour Certificat, sélectionnez un certificat SSL.
- Pour créer la redirection, cochez la case Activer la redirection HTTP vers HTTPS.
- Cliquez sur OK.
- Complétez la configuration du backend et les autres configurations requises.
- Cliquez sur Créer.
Vous devez sélectionner le protocole HTTPS et utiliser une adresse IP réservée (non éphémère) pour pouvoir cocher la case.
Selon votre type de backend, suivez les instructions de la console Google Cloud de l'un des guides suivants pour terminer cette configuration :
- Backend Compute Engine
- Bucket de backend
- Backend Cloud Run, App Engine ou Fonctions Cloud Run
- Backend externe
Lorsque la case Enable HTTP to HTTPS redirect (Activer la redirection HTTP vers HTTPS) est cochée, un équilibreur de charge HTTP partiel supplémentaire est automatiquement créé. Il se compose d'un mappage d'URL, d'une règle de transfert et d'un proxy HTTP cible. Cet équilibreur de charge HTTP partiel utilise la même adresse IP que votre équilibreur de charge HTTPS et redirige les requêtes HTTP vers l'interface HTTPS de votre équilibreur de charge. Il utilise 301 Moved Permanently
comme code de réponse de redirection par défaut.
Une fois l'équilibreur de charge HTTPS créé, vous pouvez voir l'équilibreur de charge HTTP partiel dans la liste des équilibreurs de charge, avec un suffixe -redirect. Testez la configuration en suivant les étapes décrites dans la section Tester la redirection de HTTP vers HTTPS.
Pour les équilibreurs de charge existants
Si vous disposez déjà d'un équilibreur de charge d'application HTTPS (appelé ici LB1) qui diffuse du trafic HTTPS sur le port 443, vous devez créer un équilibreur de charge d'application HTTP partiel (appelé ici LB2) avec la configuration suivante :
- Adresse IP frontend identique à LB1
- Redirection configurée dans le mappage d'URL
Cet équilibreur de charge HTTP partiel utilise la même adresse IP que votre équilibreur de charge HTTPS et redirige les requêtes HTTP vers l'interface HTTPS de votre équilibreur de charge.
Cette architecture est illustrée par le schéma suivant.
Rediriger le trafic vers l'équilibreur de charge HTTPS
Après avoir vérifié que l'équilibreur de charge HTTPS (LB1) fonctionne, vous pouvez créer l'équilibreur de charge HTTP 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 la console Google Cloud, cette opération est effectuée automatiquement.
Les équilibreurs de charge d'application externes régionaux ne sont pas compatibles avec la console Google Cloud.
gcloud
- Créez un fichier YAML
/tmp/web-map-http.yaml
. Cet exemple utilise MOVED_PERMANENTLY_DEFAULT comme code de réponse. - Validez le mappage d'URL.
- 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
. - 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 :
- Créez un proxy HTTP cible ou mettez à jour un proxy HTTP existant en utilisant
web-map-http
comme mappage d'URL. - Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy. L'option
--address
spécifie la valeurlb-ipv4-1
, qui correspond à la même adresse IP que celle utilisée pour l'équilibreur de charge HTTPS externe.
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¶meter2=value2 expectedOutputUrl: https://example.com/test/?parameter1=value1¶meter2=value2 expectedRedirectResponseCode: 301
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.
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.
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
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http \ --global
gcloud compute target-http-proxies update http-lb-proxy \ --url-map=web-map-http \ --global
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Ajouter un en-tête HSTS personnalisé
Lorsque vous ajoutez l'en-tête Strict-Transport-Security
HTTP au service de backend de votre équilibreur de charge HTTPS, l'équilibreur de charge envoie l'en-tête personnalisé au client de sorte que le navigateur redirige la requête la prochaine fois que le client essaie d'accéder à l'URL via HTTP. Les paramètres d'en-tête sont les suivants :
- Nom de l'en-tête :
Strict-Transport-Security
- Valeur d’en-tête :
max-age=31536000; includeSubDomains; preload
Pour ajouter l'en-tête personnalisé à la configuration du service de backend, utilisez l'option --custom-response-header
.
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
Procédures associées
Pour utiliser Terraform, consultez l'onglet Redirection HTTP vers HTTPS.
Pour GKE, consultez la section Redirections HTTP vers HTTPS de la documentation GKE.
Pour les équilibreurs de charge d'application internes, consultez la page Configurer la redirection HTTP vers HTTPS pour les équilibreurs de charge d'application internes.
Pour les autres types de redirections, consultez la section Redirections d'URL.