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

Date de la dernière mise à jour : 05/11/2019

J'utilise les écouteurs HTTP et HTTPS sur mon Classic Load Balancer dans Elastic Load Balancing (ELB). 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 devez 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.

Important : les équilibreurs de charge d'application peuvent rediriger le trafic HTTP vers HTTPS à l'aide d'actions de redirection. Vous pouvez migrer votre Classic Load Balancer vers un équilibreur de charge d'application pour utiliser cette fonctionnalité.

Vous devez configurer vos règles de réécriture pour qu'elles utilisent l'en-tête X-Forwarded-Proto et redirigent uniquement les clients HTTP. À défaut, 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.

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 qu'elles utilisent 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 ;
  • gèrent les clients utilisant HTTPS directement.

Important : les configurations suivantes sont uniquement fournies à titre d'exemple. Modifiez-les en fonction des versions de l'application que vous utilisez et de votre cas d'utilisation.

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

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 (non recommandée)

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 l'exemple de règle de réécriture ci-dessous. 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 l'exemple de 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 est visible dans la section URL Rewrite (Réécriture URL).

8.    Redémarrez votre site Web.

9.    Vérifiez que votre redirection fonctionne.