I've just deploy a new laravel 7 application on AWS Elastic beanstalk. I've noticed they changed the Apache server to Nginx server.
https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-php.html
This is my api backend URL: http://mappab-api-staging.mappab.com.br/
This is the login route: http://mappab-api-staging.mappab.com.br/login - 404 status.
Did you get the same problem? How can I fix it?
My php.conf placed at /etc/nginx/conf.d/elasticbeanstalk/ is:
root /var/www/html/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ /\.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
If you are using Amazon Linux 2 with Elastic Beanstalk with an NGINX server then you need to follow this documentation.
Basically all you need to do is create a folder structure mapping the NGINX config location you want to place you config file with .platform as the topmost folder this should be in your application root
i.e. in a laravel app create a folder called .platform in the same level as the app folder. Within this .platform folder create the following
/nginx/conf.d/elasticbeanstalk
so you have a folder structure like .platform/nginx/conf.d/elasticbeanstalk
in this last folder elasticbeanstalk place your config file
e.g. laravel.conf
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
Once you upload the application to EB it will copy the file to the same location on the server and restart NGINX.
In some cases this might not be enough and when you try to go to any specific route you'll get a
419 | PAGE EXPIRED
To fix that simply SSH into your instance, go to the project location and clear the cache
php artisan cache:clear
I encountered the same issue, since April 30th 2020 EB is auto configured to nginx instead of apache so the htaccess file no longer works. So when I uploaded my code the front page (index.php) was working but not the api. This is what I did to solve the issue - taken from the AWS developer group: https://forums.aws.amazon.com/thread.jspa?messageID=942914󦍂
ssh -i "your_private_key_name.pem" ec2-user@your_server
You may get the error message that your PEM is too open in which case use the command:
chmod 400 your_private_key_name.pem
cd /etc/nginx/conf.d/elasticbeanstalk
sudo nano php.conf
# This file is managed by Elastic Beanstalk
#
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
root /var/www/html/public;
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
Save the document
Run this command to restart nginx
sudo nginx -s reload
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With