Recientemente, AWS comenzó a distribuir el entorno PHP de Elastic Beanstalk con Amazon Linux 2, que ha eliminado Apache en favor de Nginx. He estado tratando de configurar correctamente mi proyecto Laravel para que funcione, solía agregar algo de configuración .htaccess y eso fue así, en Nginx parece que no puedo entender cómo hacer que mi aplicación funcione, mi primer problema fue el puerto de proxy inverso, que arreglé configurando la variable de entorno PORT en 80, pero cuando intento acceder a cualquier ruta desde la URL aparte de /, me da un error 404 No encontrado.
así que traté de agregar un .ebextension/Nginx/nginx.conf a mi proyecto que contiene lo siguiente:
user nginx; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofile 33282; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; include conf.d/*.conf; map $http_upgrade $connection_upgrade { default "upgrade"; } server { listen 80 default_server; root /var/app/current/public; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } access_log /var/log/nginx/access.log main; client_header_timeout 60; client_body_timeout 60; keepalive_timeout 60; gzip off; gzip_comp_level 4; # Include the Elastic Beanstalk generated locations include conf.d/elasticbeanstalk/01_static.conf; include conf.d/elasticbeanstalk/healthd.conf; } }pero no funcionó, traté de verificar si las configuraciones se aplicaban en la instancia, pero /etc/Nginx/Nginx.conf no cambió.
¿Cómo puedo configurar un Elastic Beanstalk PHP Amazon Linux 2 a través de .ebextensions para que Nginx funcione con una aplicación Laravel sin estado?
¡Gracias!
Agregué manualmente un archivo a /etc/nginx/conf.d/elasticbeanstalk/ y lo llamé laravel.conf. El archivo laravel.conf contenía:
location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; }Solución completa:
https://forums.aws.amazon.com/thread.jspa?threadID=321787&tstart=0
La forma correcta sería agregar este archivo dentro
.platform/nginx/conf.d/elasticbeanstalk/laravel.confAquí hay un enlace a los documentos:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html
La forma correcta de hacerlo es crear la siguiente estructura de carpetas en la raíz de su proyecto laravel
.platform/nginx/conf.d/elasticbeanstalk/laravel.conf (o cualquier otro nombre de archivo con la terminación .conf) e ingrese el siguiente código:
location / { try_files $uri $uri/ /index.php?$query_string; }