una setup pagina pages page htaccess error configurar conf como apache .htaccess amazon-web-services elastic-beanstalk

apache - setup - localized error pages conf



Configurar apache en beanstalk elástico (3)

Estoy desarrollando con django en el beanstalk elástico y quiero hacer dos cambios en la configuración de apache:

1. redirigir www.domain.com a domain.com

2. redireccione http://domain.com a https://domain.com

No tengo experiencia con la configuración de apache, googlear me dio la idea de que debería poner RewriteRules en el archivo .htaccess.

Ejemplo: cómo forzar https en amazon elástico beanstalk sin fallar el chequeo de salud

No pude encontrar instrucciones sobre cómo hacerlo con la configuración elástica de beanstalk (.ebextensions), intenté simplemente poner un archivo .htaccess en mi archivador raíz y desplegarlo, pero no funcionó.

¿Alguien sabe cómo es posible agregar las RewriteRules en beanstalk elástico?


Hacer que www.example.com vaya a example.com se puede hacer con un CNAME en DNS si no te importa que sea un redireccionamiento. Si necesita una redirección, puede agregarla a la configuración de Apache a continuación. El punto principal de esta respuesta es detallar cómo se modifica la configuración de Apache en Elastic Beanstalk (porque hacerlo correctamente no es muy sencillo).

Esta respuesta asume que ya ha habilitado https en el grupo de seguridad del equilibrador de carga, agregado el certificado SSL al equilibrador de carga, agregado 443 a los puertos reenviados por el equilibrador de carga y apuntó su nombre de dominio al entorno de Elastic Beanstalk con Route 53 (o servicio DNS equivalente).

Todo lo que necesita hacer es agregar lo siguiente a uno de sus archivos .conf en el directorio .ebextensions de su proyecto :

files: "/etc/httpd/conf.d/ssl_rewrite.conf": mode: "000644" owner: root group: root content: | RewriteEngine On <If "-n ''%{HTTP:X-Forwarded-Proto}'' && %{HTTP:X-Forwarded-Proto} != ''https''"> RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </If>

Explicación

Esto es moderadamente sencillo fuera de Elastic Beanstalk. Uno usualmente agrega una regla de reescritura de Apache como la siguiente:

RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

O, si está detrás de un equilibrador de carga, como estamos en este caso:

RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Sin embargo, estas configuraciones solo funcionan dentro de un bloque <VirtualHost> . Cambiar el RewriteCond a un bloque <If> permite funcionar correctamente fuera de un bloque <VirtualHost> , lo que nos permite colocarlo en un archivo de configuración de Apache independiente. Tenga en cuenta que la configuración estándar de Apache en CentOS (incluida la configuración en ElasticBeanstalk) incluye todos los archivos que coinciden con /etc/httpd/conf.d/*.conf , que coincide con la ruta del archivo donde almacenamos este archivo.

La parte -n ''%{HTTP:X-Forwarded-Proto}'' de la condición evita que se redirija si no está detrás de un equilibrador de carga, lo que le permite tener una configuración compartida entre un entorno de producción con un equilibrador de carga y https, y un entorno de prueba que es una instancia única y no tiene https. Esto no es necesario si está utilizando balanceadores de carga y https en todos sus entornos, pero no está de más tenerlo.

Malas soluciones que he visto

He visto muchas malas soluciones a este problema, y ​​vale la pena analizarlas para comprender por qué es necesaria esta solución.

  1. Use Cloudfront: algunas personas sugieren utilizar la configuración de Cloudfront sin caché frente a Elastic Beanstalk para realizar la redirección de HTTP a HTTPS. Esto agrega un servicio completamente nuevo (por lo tanto, agrega complejidad) que no es exactamente apropiado (Cloudfront es un CDN; no es la herramienta adecuada para forzar el HTTPS en contenido dinámico inherente). La configuración de Apache es la solución normal a este problema y Elastic Beanstalk usa Apache, por lo que esa es la manera en que deberíamos ir.

  2. SSH en el servidor y ...: Esto es completamente antitético hasta el punto de Elastic Beanstalk y tiene muchos problemas. Cualquier instancia nueva creada por la escala automática no tendrá la configuración modificada. Cualquier entorno clonado no tendrá la configuración. Cualquier número de un conjunto razonable de cambios de entorno borrará la configuración. Esto es una mala idea.

  3. Sobrescriba la configuración de Apache con un archivo nuevo: Esto está llegando al ámbito correcto de la solución, pero le deja con una pesadilla de mantenimiento si Elastic Beanstalk cambia aspectos de la configuración del servidor (lo que muy bien pueden hacer). También vea los problemas en el siguiente artículo.

  4. Edite dinámicamente el archivo de configuración de Apache para agregar algunas líneas: esta es una idea decente. El problema con esto es que no funcionará si Elastic Beanstalk alguna vez cambia el nombre de su archivo de configuración Apache predeterminado, y que este archivo puede sobrescribirse cuando menos lo espere: https://forums.aws.amazon.com/thread.jspa?threadID=163369


Solo como referencia para otros, utilizando la solución de Zags para redirigir el no-www a www, agregue esto a su .ebextensions/your_file.config :

files: "/etc/httpd/conf.d/www_rewrite.conf": mode: "000644" owner: root group: root content: | RewriteEngine On <If "''%{HTTP_HOST}'' !~ /^www/./"> RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </If>


esta es una solucion facil

  1. ssh en su instancia de EC2
  2. copie el contenido de /etc/httpd/conf.d/wsgi.conf en un archivo local llamado wsgi.conf que se colocará en la carpeta base de su aplicación
  3. Edite la versión local de wsgi.conf y agregue las siguientes reglas de redireccionamiento dentro de las etiquetas <VirtualHost> </ VirtualHost>

    RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

  4. Cambie "/ status" a cualquier página que esté utilizando como página de comprobación de estado .

  5. Guarda el archivo
  6. Edite su archivo <app> .conf dentro de su archivo. Directorio ebextensions para agregar un comando contenedor para copiar esta versión de wsgi.conf sobre la versión de Amazon

    container_commands: 01_syncdb: command: "django-admin.py syncdb --noinput" leader_only: true 02_collectstatic: command: "django-admin.py collectstatic --noinput" 03_wsgireplace: command: ''cp wsgi.conf /etc/httpd/conf.d/wsgi.conf'' ...

  7. Implementar el código.

  8. La versión implementada de wsgi.conf en /etc/httpd/conf.d/wsgi.conf ahora incluirá las reglas de redireccionamiento necesarias.

Debería funcionar y el archivo se actualizará correctamente para cada implementación. Lo único que se debe tener en cuenta es que si Amazon cambia su contenido de archivo wsgi.conf en el futuro, es posible que su copia ya no funcione.

Fuente: rickchristianson