Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
85 lines (63 sloc) 3.2 KB
#### An example config for a Rails application running with nginx and passenger server on Ubuntu 16.04/18.04. ####
#### Assuming you're going to use letsencrypt for SSL certificate. ####
#1. Replace these or adjust the directory names as needed. This configuration assumes that the project file (rails_app) is located in '/home/username' directory.
## example.com = your domain name
## rails_app = your application directory
## username = server username
#2. weak DH parameter fix :
## sudo openssl dhparam -out /etc/nginx/dhparams.pem 2048 # for ssl_dhparam
#3. After setting up the config (only first part - to validate the domain first)
## cert generation command :
#### sudo certbot certonly --webroot -w /home/username/rails_app/public -d example.com -d www.example.com
## Note : append --dry-run to certbot command if you want to check whether setup is correct and you're not getting any error, without exhausting your limit.
## ---------------- nginx config begins here ---------------------##
## First part - add only this server block to validate domain and generate the certificate from LetsEncrypt
## After the certificate is generated you can updated nginx config to add all the blocks below.
# redirect http to https
server {
listen 80;
listen [::]:80; #IPv6
server_name example.com, www.example.com;
location / {
return 301 https://$host$request_uri;
}
location /.well-known {
root /home/username/ssl_acme;
}
}
# redirect www to non-www
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_tickets off;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header Strict-Transport-Security max-age=15768000;
passenger_enabled on;
rails_env production;
root /home/username/rails_app/current/public;
# Cache static content
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 10d;
add_header Vary Accept-Encoding;
access_log off;
}
}
## ---------------- nginx config ends here ---------------------##
You can’t perform that action at this time.