Laravel | AWS ElasticBeanstalk | Nginx | SSL
If you are working with Laravel or any PHP application and would like to deploy it to AWS EC2 instance through an ElasticBeanstalk, you could do that for sure. Assuming that you are deploying it on the Nginx webserver, there are a few things that you need to consider.
- You would have to tell the webserver to read the .php files
- You need to add the SSL certificates onto the server. This can be done through the .ebextension configration
- You need to create a redirect on the NGinx server for all http requests to https
AWS allows you to overwrite the NGINX conf file which can be done simply by placing a file in the following path.
.platform\nginx\nginx.conf
Put the following code which listens to both ports 80 and 443. Also the config tells the server to use the location path for php files.
#Elastic Beanstalk Nginx Configuration File
#Updated by SYED
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 32136;
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;
access_log /var/log/nginx/access.log main;
server_name _;
return 301 https://$host$request_uri;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
server {
listen 443 ssl;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
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;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
}
Comments