Comment rediriger le trafic HTTP vers HTTPS sur mon Classic Load Balancer ?

Dernière mise à jour : 05/11/2020

J'utilise les écouteurs HTTP et HTTPS sur mon Classic Load Balancer. Mon Classic Load Balancer décharge SSL et la connexion backend écoute sur un port HTTP unique (port 80). Lorsque j'essaie de rediriger le trafic de HTTP vers HTTPS (port 443), je reçois l'erreur « ERR_TOO_MANY_REDIRECTS ». Comment éliminer cette erreur sans changer mon écouteur backend sur le port 443 ?

Brève description

Les équilibreurs Classic Load Balancer ne peuvent pas rediriger le trafic HTTP vers HTTPS. À la place, vous pouvez inclure des règles de réécriture sur les serveurs Web des instances Amazon Elastic Compute Cloud (Amazon EC2) derrière votre Classic Load Balancer.

Vous devez configurer vos règles de réécriture pour utiliser l'en-tête X-Forwarded-Proto et rediriger uniquement les clients HTTP. Sinon, les règles de réécriture peuvent créer une boucle infinie de demandes de redirection entre votre Classic Load Balancer et les instances qui se trouvent derrière lui. Une boucle de ce genre génère l'erreur « ERR_TOO_MANY_REDIRECTS ».

Remarque : les équilibreurs de charge d'application peuvent rediriger le trafic HTTP vers HTTPS à l'aide d'actions de redirection. Migrez votre Classic Load Balancer vers L'Application Load Balancer pour utiliser cette fonctionnalité.

Résolution

Consultez les exemples de configurations suivantes pour les serveurs web IIS, Apache et NGINX. Configurez les serveurs web derrière votre Classic Load Balancer pour utiliser l'en-tête X-Forwarded-Proto afin de diriger le trafic en fonction de l'utilisation de HTTP ou de HTTPS par les clients. N'oubliez pas d'ajouter des règles de réécriture à vos serveurs Web qui :

  • redirigent les clients utilisant HTTP vers une URL HTTPS ;
  • servent des clients utilisant HTTPS directement.

Important : les configurations suivantes sont uniquement fournies à titre d'exemple. Modifiez-les en fonction de votre configuration et de votre cas d'utilisation.

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

1.    Ouvrez votre fichier de configuration Apache. Les emplacements possibles sont les suivants : /etc/httpd/conf/httpd.conf (Apache 2/httpd),/etc/apache2/sites-enabled/(Apache 2.4) ou /etc/apache2/apache2.conf (Apache sur Ubuntu).

2.    Ajoutez à la section VirtualHost de votre fichier de configuration une règle de réécriture similaire à ce qui suit :

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

3.    Enregistrez votre fichier de configuration Apache.

4.    Redémarrez Apache.

Serveurs Apache : méthode de fichier .htaccess (pas une meilleure pratique)

Avertissement : il est recommandé d'utiliser la méthode de fichier hôte virtuel Apache décrite dans la section précédente. Conformément aux directives sur les fichiers .htaccess Apache, utilisez les fichiers .htaccess seulement si vous n'avez pas accès au fichier de configuration Apache principal.

1.    Ouvrez votre fichier de configuration Apache. Les emplacements possibles sont les suivants : /etc/httpd/conf/httpd.conf (Apache 2/httpd) ou /etc/apache2/sites-enabled/ (Apache 2.4).

2.    Modifiez la directive Directory (Répertoire) pour activer .htaccess comme suit :

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

3.    Enregistrez votre fichier de configuration Apache.

4.    Ouvrez votre fichier .htaccess.

5.    Ajoutez une règle de réécriture similaire à ce qui suit :

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

6.    Enregistrez votre fichier .htaccess.

7.    Redémarrez Apache.

Serveurs NGINX

Remarque : cette solution s'applique à NGINX 1.10.3 (Ubuntu) et à NGINX 1.12.1 (Amazon Linux).

1.    Ouvrez votre fichier de configuration NGINX (nginx.conf).

2.    Ajoutez la règle de réécriture suivante. Veillez à modifier la règle de réécriture correspondant à votre configuration.

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

3.    Redémarrez NGINX.

Serveurs IIS

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

1.    Installez le module de réécriture d'URL IIS de Microsoft.

2.    Ouvrez votre fichier web.config.

3.    Ajoutez la règle de réécriture suivant à la section <system.WebServer>. Assurez-vous de modifier la règle de réécriture correspondant à votre configuration spécifique.

<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}/{R:1}"/>
        </rule>
    </rules>
</rewrite>

4.    Enregistrez votre fichier web.config.

5.    Ouvrez le gestionnaire des services Internet (IIS).

6.    Actualisez le site Web par défaut.

7.    Vérifiez que votre nouvelle règle de réécriture apparaît dans la section URL Rewrite (Réécriture URL).

8.    Redémarrez votre site Web.

9.    Vérifiez que votre redirection fonctionne.