Avani vous montre comment
rediriger le trafic HTTP vers HTTPS
à l'aide d'une équilibreur de charge et d'Apache

redirect-http-https-elb-avani

J'utilise des écouteurs HTTP et HTTPS sur mon équilibreur de charge Elastic Load Balancing (ELB). Le ELB décharge SSL et le backend n'écoute que sur un seul port HTTP (HTTPS ou HTTP). Je veux que tout le trafic parvenant à mon serveur web sur le port 80 soit redirigé vers le port HTTPS 443, mais je ne veux pas que l'écouteur de mon serveur backend soit le port 443. Lorsque je redirige du trafic, mon site Web arrête de fonctionner et je reçois le message d'erreur suivant : ERR_TOO_MANY_REDIRECTS. Comment résoudre ce problème ?

Cette erreur est généralement provoquée par les éléments suivants :

  1. La règle de réécriture du serveur web pour l'acheminement des demandes HTTP vers HTTPS entraîne l'utilisation par les demandes du port 443 pour le trafic HTTPS sur l'équilibreur de charge.
  2. L'équilibreur de charge continue à envoyer les demandes au serveur web backend sur le port 80.
  3. Le serveur web backend redirige ces demandes vers le port 443 de l'équilibreur de charge.

Ceci provoque une boucle infinie de redirection entre l'équilibreur de charge et le serveur web backend et les demandes ne sont jamais traitées.

A l'aide de l'en-tête X-Forwarded-Proto de la demande HTTP, modifiez la règle de réécriture de votre serveur web afin que celle-ci s'applique uniquement si le client utilise le protocole HTTP. Ignorez la règle de réécriture pour tous les autres protocoles utilisés par le client.

Ainsi, si les clients utilisent le protocole HTTP pour accéder à votre site web, ils sont redirigés vers une URL HTTPS ; s'ils utilisent HTTPS, ils sont servis directement par le serveur web.

Remarque : cet article fournit des exemples pour les serveurs Web Apache, Nginx et IIS.

Apache

Utilisez la règle mod_rewrite dans le fichier de l'hôte virtuel ou .htaccess. Nous recommandons comme bonne pratique d'utiliser le fichier de l'hôte virtuel pour la règle de redirection.

Fichier d'hôte virtuel (recommandé)

La règle de réécriture doit être incluse dans la section d'hôte virtuel du fichier de configuration. Par exemple, avec le serveur httpd Apache, modifiez le fichier /etc/httpd/conf/httpd.conf et pour Apache 2.4, modifiez le fichier configuration dans le dossier /etc/apache2/sites-enabled/.

<VirtualHost *:80>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

</VirtualHost>

fichier .htaccess

Remarque : l'utilisation de .htaccess n'est pas recommandée et vous ne devez y avoir recours que si vous n'avez pas accès au fichier de configuration principal. Pour en savoir plus, consultez Didacticiel pour le serveur HTTP Apache : fichiers .htaccess.

Pour utiliser .htaccess, vous devez l'activer dans le fichier de configuration Apache depuis la directive de répertoire. Par exemple, avec un serveur httpd Apache, modifiez le fichier de configuration /etc/httpd/conf/httpd.conf. Pour Apache 2.4, modifiez le fichier de configuration dans le dossier /etc/apache2/sites-enabled/. Pour en savoir plus, consultez Didacticiel pour le serveur HTTP Apache : fichiers .htaccess.

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

La règle de réécriture dans le fichier .htaccess se présente comme suit :

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Nginx

La règle de réécriture pour un backend Nginx dans le fichier ngnix.conf se présente comme suit :

Remarque : s'applique aux versions nginx/1.10.3 (Ubuntu) et nginx/1.12.1 (Amazon Linux).

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

IIS

Avant de modifier votre fichier web.config, vous devez installer le module de réécriture d'URL depuis les Téléchargements Microsoft IIS.

La règle de réécriture pour un backend IIS est semblable à ce qui suit dans le fichier web.config dans la section  :

Remarque : s'applique uniquement à Microsoft Windows Server 2012 R2 et 2016 Base.

<rewrite> 
<rules> 
<rule name="Rewrite HTTP to HTTPS” stopProcessing=”true”> 
<match url="^(.*)$" /> 
<conditions logicalGrouping=”MatchAny”> 
<add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" />
</conditions> 
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 
</rules> 
</rewrite>

Ouvrez le gestionnaire IIS, puis actualisez le site Web par défaut. La règle devrait s'afficher dans la section « Réécriture d'URL ». Redémarrez le site Web, puis testez-le.


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 12/08/2016

Date de mise à jour : 27/03/2018