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

redirect-http-https-elb-avani

J'utilise Elastic Load Balancing (ELB), et j'ai des écouteurs HTTP et HTTPS sur mon Classic Load Balancer. Lorsque j'ajoute la logique de redirection à mes serveurs Web, mon site Web cesse de fonctionner et je reçois l'erreur ERR_TOO_MANY_REDIRECTS. L'équilibreur de charge décharge SSL et le backend écoute sur un seul port HTTP. Je veux que tout le trafic parvenant à mon serveur web sur le port 80 via l'équilibreur de charge soit redirigé vers le port HTTPS 443, mais je ne veux pas que l'écouteur de mon backend soit le port 443. Comme résoudre ce problème ?

Si vous utilisez des Classic Load Balancer, vous ne pouvez pas rediriger le trafic HTTP vers HTTPS au niveau de l'équilibreur de charge. Dans ce cas, implémentez une logique de redirection dans les serveurs Web derrière les équilibreurs de charge.

L'exemple suivant provoque une boucle infinie de redirection entre l'équilibreur de charge et le serveur web backend :

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

L'erreur ERR_TOO_MANY_REDIRECTS est renvoyée, et les demandes ne sont jamais servies.

Pour résoudre cela, modifiez la règle de réécriture de votre serveur Web à l'aide de l'en-tête X-Forwarded-Proto de la demande HTTP, afin que cette règle s'applique seulement si le client utilise le protocole HTTP. Ignorez la règle de réécriture pour tous les autres protocoles utilisés par le client.

Remarque : si vous utilisez des équilibreurs de charge d'application, utilisez les actions de redirection pour rediriger le trafic.

Les exemples suivants pour les serveurs Web Apache, NGINX et IIS fonctionnent comme suit :

  • Lorsque des clients utilisent HTTP pour accéder à votre site Web, ils sont redirigés vers une URL HTTPS.
  • Lorsque des clients utilisent HTTPS pour accéder à votre site Web, ils sont servis directement par le serveur Web.

Serveurs Apache : méthode de fichier hôte virtuel (recommandé)

Insérez la règle de réécriture dans la section de l'hôte virtuel de votre fichier de configuration. Par exemple, avec un serveur Apache httpd, modifiez le fichier /etc/httpd/conf/httpd.conf, et pour Apache 2.4, modifiez le fichier .conf 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>

Serveurs Apache : méthode de fichier .htaccess (non recommandé)

Avertissement : la méthode .htaccess n'est pas recommandée et doit être utilisée seulement si vous n'avez pas accès au fichier de configuration principal. Consultez Apache HTTP Server Tutorial: .htaccess files.

1. Activez .htaccess dans le fichier de configuration Apache à partir de la directive du répertoire. Par exemple, avec un serveur Apache httpd, modifiez le fichier /etc/httpd/conf/httpd.conf. Pour Apache 2.4, modifiez le fichier conf dans le dossier /etc/apache2/sites-enabled/. Consultez Apache HTTP Server Tutorial: .htaccess files.

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

2. Ajoutez la règle de réécriture suivante dans votre fichier .htaccess :

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

Serveurs NGINX

Remarque : applicable à nginx/1.10.3 (Ubuntu) et nginx/1.12.1 (Amazon Linux).

Modifiez l'exemple de règle de réécriture suivant (nginx.conf) :

server {
    listen 80;
    server_name _;
    if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
    }
}

Serveurs IIS

Remarque : applicable uniquement à Microsoft Windows Server 2012 R2 et 2016 Base.

1. Installez le module de réécriture d'URL à partir des téléchargements Microsoft IIS.

2. Modifiez l'exemple de règle de réécriture suivant pour un backend IIS dans la section <system.webServer> de web.config:

<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>

3. Ouvrez le gestionnaire IIS et actualisez le site Web par défaut. La règle doit apparaître dans la section URL Rewrite.

4. Redémarrez le site Web et confirmez que la redirection fonctionne.


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 : 31/08/2018