¿Cómo redirijo el tráfico HTTP a HTTPS en mi Classic Load Balancer?

4 minutos de lectura
0

Uso agentes de escucha HTTP y HTTPS en mi Classic Load Balancer. Mi equilibrador de carga clásico descarga SSL, y la conexión del backend escucha en un único puerto HTTP (puerto 80). Cuando intento redirigir el tráfico de HTTP a HTTPS (puerto 443), recibo el error “ERR_TOO_MANY_REDIRECTS”. ¿Cómo puedo solucionar este error sin cambiar mi agente de escucha de backend al puerto 443?

Descripción corta

Los equilibradores de carga clásicos no pueden redirigir el tráfico HTTP a HTTPS de forma predeterminada. En su lugar, configure las reglas de reescritura para las instancias de servidores web detrás de Classic Load Balancer.

Tiene que configurar sus reglas de reescritura para utilizar el encabezado X-Forwarded-Proto y redirigir solo a los clientes HTTP. De lo contrario, las reglas de reescritura pueden crear un bucle infinito de solicitudes de redirección entre su equilibrador de carga clásico y las instancias que hay detrás de este. Un bucle de este tipo provoca el error “ERR_TOO_MANY_REDIRECTS”.

Nota: Los equilibradores de carga de aplicaciones pueden redirigir el tráfico HTTP a HTTPS con Acciones de redirección. Migre su equilibrador de carga clásico a un equilibrador de carga de aplicaciones para utilizar esta característica.

Resolución

Revise las siguientes configuraciones de ejemplo para los servidores web Apache, NGINX e IIS. Configure los servidores web detrás de su equilibrador de carga clásico para que utilicen el encabezado X-Forwarded-Proto para dirigir el tráfico en función de si los clientes utilizan HTTP o HTTPS. Asegúrese de agregar reglas de reescritura a sus servidores web que:

  • Redirijan a los clientes que utilizan HTTP a una URL HTTPS
  • Asistan a los clientes que utilizan HTTPS directamente

Importante: Las siguientes configuraciones se proporcionan solo como ejemplos. Modifíquelas en función de su configuración y caso de uso.

Servidores Apache: método de archivo de anfitrión virtual (práctica recomendada)

1.    Abra su archivo de configuración de Apache. Las posibles ubicaciones incluyen /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4), o /etc/apache2/apache2.conf (Apache en Ubuntu).

2.    Agregue una regla de reescritura a la sección VirtualHost de su archivo de configuración similar a la siguiente:

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

3.    Guarde su archivo de configuración de Apache.

4.    Reinicie Apache.

Servidores Apache: método del archivo .htaccess (no es una práctica recomendada)

Advertencia: Es una práctica recomendada utilizar el método del archivo de anfitrión virtual de Apache descrito en la sección anterior. Según las directrices de los archivos .htaccess de Apache, utilice los archivos .htaccess solo si no tiene acceso al archivo de configuración principal de Apache.

1.    Abra su archivo de configuración de Apache. Las posibles ubicaciones incluyen /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4).

2.    Edite la directriz Directory (Directorio) para habilitar el .htaccess como se indica a continuación:

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

3.    Guarde su archivo de configuración de Apache.

4.    Abra su archivo .htaccess.

5.    Agregue una regla de reescritura similar a la siguiente:

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

6.    Guarde su archivo .htaccess.

7.    Reinicie Apache.

Servidores NGINX

Nota: Esta resolución se aplica a NGINX 1.10.3 (Ubuntu) y NGINX 1.12.1 (Amazon Linux).

1.    Abra su archivo de configuración NGINX (nginx.conf).

2.    Agregue la siguiente regla de reescritura. Asegúrese de modificar la regla de reescritura para su configuración.

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

3.    Reinicie NGINX.

Servidores IIS

Nota: Esta resolución se aplica a Microsoft Windows Server 2012 R2 y 2016 Base.

1.    Instale el módulo de reescritura de URL de IIS de Microsoft.

2.    Abra su archivo web.config.

3.    Agregue la siguiente regla de reescritura a la sección <system.webServer>. Asegúrese de modificar la regla de reescritura para su configuración específica.

<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.    Guarde su archivo web.config.

5.    Abra el IIS Manager.

6.    Actualice el sitio web predeterminado.

7.    Verifique que su nueva regla de reescritura aparezca en la sección de reescritura de URL.

8.    Reinicie el sitio web.

9.    Verifique que la redirección funcione.


Información relacionada

Recibo errores HTTP 5xx cuando me conecto a servidores web que se ejecutan en instancias EC2 configuradas para usar un equilibrador de carga clásico. ¿Cómo soluciono estos errores?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años