-
Notifications
You must be signed in to change notification settings - Fork 138
/
lets_encrypt_nginx_config_for_rails.conf
84 lines (63 loc) · 3.2 KB
/
lets_encrypt_nginx_config_for_rails.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#### 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 ---------------------##