Tengo problemas para forzar HTTPS con un sitio que estoy implementando a través de AWS Elastic Beanstalk.
Es una aplicación frontend que usa EmberJS. He estado dando vueltas en círculos durante muchos días tratando de descubrir cómo redirigir el tráfico http a https. Estoy usando Amazon Linux AMI en mi máquina EC2.
Llegué a la conclusión (aún no estoy seguro de si esto es correcto) de que no es dentro de Elastic Beanstalk que fuerzo HTTPS. Estoy permitiendo HTTP y HTTPS a través de mi Elastic Beanstalk Load Balancer, y estoy intentando redirigir en el servidor.
Aquí es donde me encuentro con problemas. Estoy encontrando muchas respuestas sobre las reglas de reescritura sin las mod_rewrite
cuales se basan en el X-Forwarded-Proto
encabezado, pero ese archivo no existe en mi máquina EC2 de acuerdo con una búsqueda de búsqueda.
También intenté crear un archivo de configuración dentro del .ebextensions
directorio, pero tampoco funcionó.
Lo principal que intento hacer es que los usuarios se dirijan a https cuando intenten presionar la dirección http. Cualquier sugerencia o sugerencia es muy apreciada, ¡gracias!
EDITAR: estoy usando Debian jessie v1.4.1 de 64 bits con Python 3.4 (preconfigurado - Docker)
fuente
Respuestas:
Creo que debe especificar qué entorno Elastic Beanstalk utiliza (consulte: Plataformas compatibles ), porque un entorno diferente tiene una configuración diferente.
Básicamente, debe personalizar:
Para personalizarlo, puede usar CLI o
.ebextensions
.Puede verificar Habilitar HTTPS y HTTP-Redirect en AWS Elastic Beanstalk . Le indica cómo configurar Elastic Beanstalk Single Docker Container para servir HTTPS y HTTP (redirigir a HTTPS). Puede ajustar la configuración según sus necesidades.
fuente
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
formato.ssl_certificate /opt/ssl/default-ssl.crt;
Cuando obtengo la información para el certificado, me da un "camino" pero es solo "/"También es posible hacerlo con mayor facilidad, sin tocar el equilibrador de carga, utilizando el
X-Forwarded-Proto
encabezado establecido por ELB. Esto es lo que terminé haciendo:fuente
Elastic Beanstalk no admite múltiples puertos desde un único contenedor Docker, por lo que debe manejar esto en el nivel de proxy como se sugiere. Sin embargo, su instancia EC2 no necesita saber acerca de su certificado, porque puede terminar la conexión SSL en el equilibrador de carga.
En su
.ebextensions
directorio, cree una configuración para el proxy nginx que contenga dos configuraciones de servidor; uno que representahttp://docker
(la configuración predeterminada, el puerto 80) y otro que redirige a https (elegí el puerto 8080)..ebextensions/01-nginx-proxy.config
:Cree una segunda configuración para el equilibrador de carga EB y los grupos de seguridad que los configure de la siguiente manera:
.ebextensions/02-load-balancer.config
:(Nota: no olvide reemplazar SSLCertificateId y VpcId con sus valores).
Cualquier tráfico en el puerto 80 del equilibrador de carga (HTTP) llegará al puerto 8080 en la instancia EC2, que redirige a HTTPS. El tráfico en el puerto 443 en el equilibrador de carga (HTTPS) terminará siendo atendido por el puerto 80 en la instancia EC2, que es el proxy del acoplador.
fuente
Estoy usando Terraform para habilitar la redirección de HTTP a HTTPS en ElasticBeanstalk,
Acabo de agregar una regla de escucha adicional
fuente