Estoy implementando una aplicación PHP en Beanstalk y todo parece estar bien, sin embargo, mis archivos de configuración .ebextensions no parecen estar ejecutándose.
Solo tengo un único archivo de configuración que se supone que crea un archivo y luego vuelve a cargar nginx.
/my-project/.ebextensions/nginx.config :
files: "/etc/nginx/conf.d/elasticbeanstalk/extend-nginx.conf" : mode: "000755" owner: root group: root content: | add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; location / { try_files $uri $uri/ /index.php?$query_string; } container_commands: reload_nginx: command: "sudo service nginx reload" Mi arquitectura es actualmente:
1. CodePipeline conectado a GitHub que implementa la aplicación en CodeDeploy cada vez que se actualiza el maestro.
2. CodeDeploy recibe la implementación de CodePipeline.
3. CodeDeploy lo instala en la instancia de Elastic Beanstalk.
Todos los pasos anteriores funcionan bien. Simplemente no entiendo por qué el archivo de configuración en .ebextensions no crea el archivo como se esperaba.
Nota: He confirmado que la carpeta .ebextensions está en la raíz de la revisión .zip al descargar manualmente una de las revisiones y verificar.
Para mí, estaba confundido por qué un archivo que estaba tratando de crear no aparecía cuando estaba implementando. La implementación tuvo un error y el sistema eliminaría automáticamente el archivo debido al error en lugar de permitir que persistiera mientras se revertía a su estado anterior en caso de falla. Esto me dio la falsa idea de que el archivo nunca se creó en primer lugar.
Pude determinar esto desde /var/log/nginx/error.log que dio lo siguiente:
2020/07/29 20:11:36 [emerg] 23006#0: "gzip" directive is duplicate in /var/proxy/staging/nginx/conf.d/elasticbeanstalk/gzip.conf:1 lo que significaba que, al menos para mí, necesitaba anular nginx.conf en lugar de agregar un archivo de configuración. Asegúrese de no recibir errores con su implementación si no ve que se crea un archivo.
Intente simplemente poner este archivo en .ebextensions/nginx/conf.d/elasticbeanstalk sin un script.
Al menos así es como funciona la plataforma Java SE: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-nginx.html . No creo que esto sea diferente para PHP.
También en su instancia de EC2 verifique la salida de los archivos de registro (cfn-init.log, cfn-init-cmd.log, etc.).
¿Puedo remitirlo al siguiente enlace que describe la forma oficial de configurar el proxy inverso nginx en entornos EB?
[1] Configuración del servidor proxy: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/nodejs-platform-proxy.html
Otra opción es usar el comando similar a 'sed' para actualizar la configuración de nginx en su lugar, de la siguiente manera:
container_commands: enable_websockets: command: | sed -i '/\s*proxy_set_header\s*Connection/c \ proxy_set_header Upgrade $http_upgrade;\ proxy_set_header Connection "upgrade";\ ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf