¿Cómo redirigir HTTP a HTTPS en AWS Application Load Balancer?

12

Nuestro sitio web necesita el cumplimiento de HIPAA, por lo que todo debe estar encriptado. No quiero que el cliente reciba un mensaje de error cuando coloque " http : //mysite.com", por lo que necesito admitir tanto HTTP como HTTPS, y redirigir HTTP a HTTPS. Estoy en lo cierto?

Lo hice correctamente en los servidores web. Entonces, si me conecto directamente a los servidores web, HTTP se redirige automáticamente a HTTPS. Todo bien.

Pero los servidores web se encuentran detrás de un AWS Application Load Balancer. No sé cómo redirigir HTTP a HTTPS en el ELB. Por lo tanto, los navegadores de los clientes aún pueden conectarse al ELB a través de HTTP.

¿Cómo configurar HTTP => HTTPS en una AWS Application Load Balancer?

En otras palabras, estoy seguro de que la conexión entre el ELB y los servidores web son HTTPS, pero ¿cómo asegurarme de que la conexión entre los navegadores del cliente y el ELB sea HTTPS?

Tonto tio
fuente
No lo haces en el LB. Lo haces en las instancias, en función del X-Forwarded-Protoencabezado que envía LB.
ceejayoz
No soy una persona del servidor: soy un programador de C #, así que discúlpeme por ser tonto: he usado el módulo de reescritura de URL para configurar la redirección en el servidor de Windows. Funciona si me conecto directamente al servidor. Pero si me conecto al ELB, aún puedo conectarme con HTTP. ¿Por qué?
Tonto tonto
¿El ALB escucha en 443 con un certificado SSL? Para estar seguro en su pregunta, ¿también desea SSL entre el ALB y los servidores?
strongjz

Respuestas:

-4

Puede agregar la siguiente configuración a su archivo .htaccess. Pero antes de eso, asegúrese de que mod_rewrite esté habilitado en el servidor y que no se deniegue el archivo .htaccess.

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

Para obtener una explicación detallada, consulte la documentación oficial de aws end. https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

imvikasmunjal
fuente
77
Esta respuesta parece involucrar al Servidor Apache HTTP
Paul Draper
2
OP pregunta cómo configurar el ELB para que le explique cómo configurar Apache. Dijeron explícitamente que ya habían configurado Apache para hacer la redirección. Por favor borra tu respuesta.
Cerin
1

Por lo general, lo que sucede es que el ELB está configurado para recibir https (puerto 443) y reenviar a la instancia EC2 (destino del equilibrador de carga) en http (puerto 80).

El servidor web de fondo redirige estas solicitudes al puerto 443 en el equilibrador de carga, lo que provoca un bucle infinito de redirección (entre el equilibrador de carga y el servidor web de fondo).

Un mensaje de error común es ERR_TOO_MANY_REDIRECTS.

La solución es mirar el X-Fordered-Proto, que es el protocolo visto por el equilibrador de carga, al decidir la redirección.

Para nginx, la configuración se verá así:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

y para apache .htaccess algo como esto:

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

NOTA: Aunque se podría pensar que sería conveniente que esto se manejara sin la reconfiguración del servidor web, a partir de la primavera de 2018 no hay forma de resolver esto usando solo ELB, es decir, debe configurar su servidor web para que esto funcione.

Sandstrom
fuente