J'utilise des écouteurs HTTP et HTTPS sur mon Classic Load Balancer Elastic Load Balancing (ELB). My Classic Load Balancer décharge le protocole SSL et la connexion dorsale écoute sur un seul port HTTP (port 80). Lorsque j'essaie de rediriger le trafic de HTTP vers HTTPS (port 443), l'erreur « ERR_TOO_MANY_REDIRECTS » s’affiche.
Brève description
Le Classic Load Balancer ne prend pas en charge la redirection du trafic HTTP vers HTTPS en tant que fonctionnalité native. Pour contourner ce problème, vous devez configurer vos règles de réécriture sur les instances de serveur Web situées derrière le Classic Load Balancer.
Configurez les règles de réécriture sur les serveurs d'applications Web pour utiliser l'en-tête X-Forwarded-Proto et rediriger les requêtes 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 situées derrière votre équilibreur de charge. Une telle boucle génère l'erreur « ERR_TOO_MANY_REDIRECTS ».
Remarque : Les Application Load Balancers prennent en charge les actions de redirection qui peuvent être utilisées pour rediriger le trafic HTTP vers HTTPS. Pour utiliser cette fonctionnalité, migrez votre Classic Load Balancer vers un Application Load Balancer.
Résolution
Consultez les exemples de configuration suivants pour les serveurs Web Apache, NGINX et IIS. Configurez les serveurs Web de votre Classic Load Balancer pour utiliser l'en-tête X-Forwarded-Proto afin de diriger le trafic selon que les clients utilisent HTTP ou HTTPS. Assurez-vous d’ajouter à vos serveurs Web des règles de réécriture qui :
- Utilisent le protocole HTTP pour rediriger les clients vers une URL HTTPS
- Utilisent le protocole HTTPS pour servir directement les clients
Remarque : Modifiez les exemples de configuration suivants en fonction de votre configuration et de votre cas d'utilisation.
Serveurs Apache : Méthode du fichier hôte virtuel
Il est recommandé d'utiliser la méthode suivante pour configurer vos serveurs Web :
-
Ouvrez votre fichier de configuration Apache. Les emplacements possibles incluent /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4) ou /etc/apache2/apache2.conf (Apache sur Ubuntu).
-
Ajoutez une règle de réécriture à la section VirtualHost de votre fichier de configuration similaire à la règle suivante :
<VirtualHost *:80>RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
-
Enregistrez votre fichier de configuration Apache.
-
Redémarrez Apache.
Serveurs Apache : méthode du fichier .htaccess
Si vous n'avez pas accès au fichier de configuration principal d'Apache, utilisez les fichiers .htaccess. Pour plus d'informations, consultez la section Quand (ne pas) utiliser les fichiers .htaccess de la page Didacticiel du serveur HTTP Apache : fichiers .htaccess sur le site Web d'Apache.
Pour configurer vos serveurs Web, procédez comme suit :
-
Ouvrez votre fichier de configuration Apache. Les emplacements possibles incluent /etc/httpd/conf/httpd.conf (Apache 2/httpd) ou /etc/apache2/sites-enabled/ (Apache 2.4).
-
Modifiez la directive Directory pour activer .htaccess :
<Directory "/var/www/html"> Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
-
Enregistrez votre fichier de configuration Apache.
-
Ouvrez votre fichier .htaccess.
-
Ajoutez une règle de réécriture similaire à la règle suivante :
RewriteEngine OnRewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
-
Enregistrez votre fichier .htaccess.
-
Redémarrez Apache.
Serveurs NGINX
Remarque : Cette résolution s'applique à NGINX 1.10.3 (Ubuntu) et NGINX 1.12.1 (Amazon Linux).
Procédez comme suit :
-
Ouvrez votre fichier de configuration NGINX (nginx.conf).
-
Ajoutez la règle de réécriture suivante. Assurez-vous de modifier la règle de réécriture pour votre configuration :
server { listen 80;
server_name _;
if ($http_x_forwarded_proto = 'http'){
return 301 https://$host$request_uri;
}
}
-
Redémarrez NGINX.
Serveurs IIS
Remarque : Cette résolution s'applique à Microsoft Windows Server 2012 R2 et 2016 Base.
Procédez comme suit :
-
Installez le module de réécriture d'URL IIS. Pour plus d'informations, consultez la page Réécriture d'URL sur le site Web de Microsoft.
-
Ouvrez votre fichier web.config.
-
Ajoutez la règle de réécriture suivante à la section <system.webServer>. Modifiez la règle de réécriture en fonction de 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>
-
Enregistrez votre fichier web.config.
-
Ouvrez le gestionnaire IIS.
-
Actualisez le site Web par défaut.
-
Vérifiez que votre nouvelle règle de réécriture apparaît dans la section Réécriture d'URL.
-
Redémarrez votre site Web.
-
Vérifiez que votre redirection fonctionne.
Informations connexes
Pourquoi une erreur HTTP 5xx s’affiche-t-elle lorsque je me connecte à des serveurs Web qui s'exécutent sur des instances EC2 configurées pour utiliser Classic Load Balancing ?