SSL Certificate, Nginx, Ruby on Rails
Prerequisites. You have google apps set up and can already received e-mails from admin@yoursite.com.
Purchase an SSL certificate from DNSimple.
Follow instructions sent to admin@yoursite.com for domain control validation.
In production.rb, change the force_ssl option to true.
config.force_ssl = true
Download your certificates from DNSimple. It can take up to an hour before they appear.
Rsync your SSL certificates to your server.
$ rsync -av www_yoursite_com.pem deploy@yoursite.com:~/ssl/
$ rsync -av www_yoursite_com.key deploy@yoursite.com:~/ssl/
On the server, move the certs into /etc/nginx/ or wherever you want to put them.
$ sudo mv ~/ssl/www_yoursite_com.pem /etc/nginx/
$ sudo mv ~/ssl/www_yoursite_com.key /etc/nginx/
Edit your Nginx configuration found in /etc/nginx/sites-available.
The proxy_set_header X-Forwarded-Proto https; is necessary to prevent an infinite redirect loop.
upstream app {
server unix:/tmp/unicorn.yoursite.sock fail_timeout=0;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/www_yoursite_com.pem;
ssl_certificate_key /etc/nginx/www_yoursite_com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
server_name www.yoursite.com yoursite.com;
root /var/www/yoursite/current/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
Restart Nginx.
$ sudo /etc/init.d/nginx restart
Sources
http://seaneshbaugh.com/posts/configuring-nginx-and-unicorn-for-force_ssl