Redirigir elb EC2 de http a https

Quiero redireccionar toda la solicitud http a https request on elb. Tengo 2 instancias ec2. Estoy usando nginx para el servidor. He intentado reescribir los archivos nginx conf sin ningún éxito. Me encantaría un consejo al respecto.

ELB establece el encabezado X-Forwarded-Proto , puede usarlo para detectar si la solicitud original era HTTP y redireccionar a HTTPS.

Puedes probar esto en tu server conf:

 if ($http_x_forwarded_proto = 'http') { return 301 https://yourdomain.com$request_uri; } 

Eche un vistazo a los documentos ELB .

Tuve el mismo problema, en mi situación HTTPS fue manejado completamente por ELB y no conocía mi dominio de origen antes de tiempo, así que terminé haciendo algo como:

 server { listen 81; return 301 https://$host$request_uri; } server { listen 80; # regular server rules ... } 

Y luego, por supuesto, señalar el ELB ‘https’ al puerto de instancia 80 y luego la ruta ‘http’ al puerto de instancia 81.

Amazon Elastic Load Balancer (ELB) admite un encabezado HTTP llamado X-FORWARDED-PROTO. Todas las solicitudes HTTPS que pasan por ELB tendrán el valor de X-FORWARDED-PROTO igual a “HTTPS”. Para las solicitudes HTTP, puede forzar HTTPS agregando la siguiente regla de reescritura simple. ¡Para mí funciona bien!

apache

Puede agregar las siguientes líneas en su archivo .htaccess:

 RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} 

O si usa vhost.conf para administrar varios dominios en el mismo servidor web EC2, puede agregar lo siguiente al vhost.conf (agréguelo al dominio para el que quiere usar https):

  ... RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} ...  

IIS

Instale el módulo Url-Rewrite de IIS, usando la GUI de configuración agregue estas configuraciones:

            

Lea más aquí

Los Balanceadores de carga de la aplicación AWS ahora son compatibles con la redirección HTTP nativa a HTTPS.

Para habilitar esto en la consola, haga lo siguiente:

  1. Vaya a su Load Balancer en EC2 y la pestaña “Listeners”
  2. Seleccione “Ver / editar reglas” en su escucha HTTP
  3. Eliminar todas las reglas excepto la predeterminada (abajo)
  4. Editar regla predeterminada: elija “Redirigir a” como una acción, deje todo como predeterminado e ingrese “443” como puerto.

Regla de escucha de redirección nativa

Lo mismo se puede lograr utilizando la CLI como se describe aquí .

Todavía no es posible hacer esto a través de Cloudformation, mira aquí .

Si todavía usa Classic Load Balancers, vaya con una de las configuraciones NGINX descritas por los demás.

Puede que no sea la solución que podría estar buscando, pero otra opción podría ser utilizar AWS CloudFront además de ELB. CloudFront ofrece la opción de redirigir todo el tráfico HTTP entrante a HTTPS.

Tuve un problema extraño con la configuración de nginx y ELB. Mi configuración incluye 3 servicios diferentes dentro de un nginx detrás de ELB. Y tuve un problema de contenido mixto: cuando su solicitud a ELB es https, pero solo dentro de ELB http, y el servidor crea una ruta relativa a static usando http, por lo que el navegador falla con el problema de “contenido mixto”. Y debo crear una solución para el trabajo http / https sin redirecciones.

Aquí está la configuración ubicada en la carpeta nginx/conf.d/ :

 # Required for http/https switching map $http_x_forwarded_port $switch { default off; "80" off; "443" on; } 

Esto significa que tendremos conocimiento del protocolo real del cliente. Como puede ver, lo tendremos en $switch var. Y en este momento lo usas en todas las ubicaciones donde lo necesitas:

 location ~ /softwareapi/index.php { fastcgi_param HTTPS $switch; .. other settings here .. } 

Con la configuración de HTTPS, la aplicación php detectará automáticamente el protocolo correcto y construirá cuidadosamente la ruta relativa para evitar problemas de contenido mixto.

Atentamente.

Las soluciones de htaccess anteriores provocaron un error en el control de salud de ELB. Tuve algunos problemas para encontrar la solución hasta que descubrí un artículo en línea en el que alguien tenía los mismos problemas que tenía. Su solución fue agregar esto al comienzo del archivo htaccess en su lugar:

 RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} ^http$ RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Para permitir esto y otras solicitudes locales a través de HTTP mientras se redirigen las solicitudes externas a través de ELB a HTTPS, ajuste la condición de reescritura para que coincida con http en lugar de una coincidencia negativa en https.

Fuente: redirigir HTTP a HTTPS con AWS y ELB

Cree un archivo .ebextensions/00_forward_http_to_https.config con el siguiente contenido:

 files: /tmp/deployment/http_redirect.sh: mode: "000755" content: | APP_URL=`/opt/elasticbeanstalk/bin/get-config environment --output yaml | grep -oP 'APP_URL: \K([^\s)\"](?!ttp:))+'` sed -ie 's@$proxy_add_x_forwarded_for;@$proxy_add_x_forwarded_for;\n if ($http_x_forwarded_proto = 'http') { return 301 https://'"$APP_URL"'$request_uri; }@' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf container_commands: http_redirect: command: "/tmp/deployment/http_redirect.sh" 

Asegúrese de configurar la variable de entorno APP_URL desde la consola de administración de AWS de antemano.