Redirigiendo EC2 elb de http a https


Quiero redirigir toda la solicitud http a la solicitud https en 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.

Author: Dag Høidahl, 2014-07-07

8 answers

ELB establece el encabezado X-Forwarded-Proto, puede usarlo para detectar si la solicitud original fue HTTP y redirigir a HTTPS a continuación.

Puedes probar esto en tu server conf:

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

Echa un vistazo a ELB docs.

 94
Author: Dmitry Mukhin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-07 12:59:18

Tuve el mismo problema, en mi situación HTTPS fue manejado completamente por ELB y no sabía mi dominio de origen con anticipación, 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, apuntando el ELB 'https' al puerto de instancia 80 y luego la ruta 'http' al puerto de instancia 81.

 32
Author: TylerFowler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-30 02:25:23

Amazon Elastic Load Balancer (ELB) admite un encabezado HTTP llamado X-FORWARDED-PROTO. Todas las solicitudes HTTPS que pasan por el 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 que desea usar https para ello):

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

IIS

Install IIS Url-Rewrite module, using the configuration GUI add these settings:

<rewrite xdt:Transform="Insert">
<rules>
<rule name="HTTPS rewrite behind ELB rule" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions>
<add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{SERVER_NAME}{URL}" />
</rule>
</rules>
</rewrite>

Leer más aquí

 15
Author: Iman Sedighi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-05 11:36:10

Los balanceadores de carga de aplicaciones de AWS ahora admiten redirección nativa de HTTP a HTTPS.

Para habilitar esto en la consola, haga lo siguiente:

  1. Vaya a su Balanceador de carga en EC2 y la pestaña "Oyentes"
  2. Seleccione "Ver / editar reglas" en su oyente 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 una portuario.

Regla de escucha de redirección nativa

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

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

Si todavía usa Balanceadores de carga Clásicos, vaya con una de las configuraciones NGINX descritas por los demás.

 11
Author: Ulli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-09 08:21:44

Puede que no sea la solución que esté 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.

 3
Author: MojoJojo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-20 14:23:36

Tuve un extraño problema con la configuración de nginx y ELB. Mi configuración incluía 3 servicios diferentes dentro de un nginx detrás de ELB. Y tenía un problema de contenido mixto: cuando su solicitud a ELB es https, pero dentro de ELB http solamente, y el servidor crea una ruta relativa a la estática usando http, por lo que el navegador falla con el problema de 'contenido mixto'. Y debo crear una solución para ambos trabajos 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 saber qué es el protocolo de cliente real. Como puedes ver, lo tendremos en $switch var. Y en este momento se utiliza esto en todos los lugares donde lo necesita:

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.

Saludos cordiales.

 3
Author: Oleg Mykolaichenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-10 16:21:51

Las soluciones htaccess anteriores causaron que fallara la comprobación de estado 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 yo. Su solución fue añadir esto al principio 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 esta y otras solicitudes locales a través de HTTP mientras se redirige solicitudes externas a través del ELB a HTTPS, ajustar la reescritura condición para coincidir en http en lugar de una coincidencia negativa en https.

Fuente: Redirigiendo HTTP a HTTPS con AWS y ELB

 1
Author: oMiKeY,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 17:16:31

Crea 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 establecer de antemano la variable de entorno APP_URL desde la consola de administración de AWS.

 -1
Author: Andres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-30 09:04:20