nginx rails unicorn HTTPS SSL対応
Overview
今更ではあるが、私のgit hubで開発しているレンタルサーバーが未だhttpである、、、、
HTTPS SSL対応していない、
ので、
対応させてみることにしてみた。
オレオレ証明書
テスト用のサーバーなので、無料の証明書を使う、
公式サイトになります。
https://letsencrypt.org/
下記が参考になります。
https://knowledge.sakura.ad.jp/5573/
これで試してみます。
git hubからソースコードを取得します。
$ cd /usr/local/
$ sudo git clone https://github.com/certbot/certbot
$ cd certbot/
git から取得してきたディレクトリーの中へ移動します。
証明書を発行します。
*** SSLの対応の際にはドメインを取得してください。 ***
今回は例としてドメイン名をhttpsession.workで設定するとして以下のコマンドを実行します。
以下オプションはご自身の設定する内容に書き換えてください。
-wにはドキュメントルートのパス
-mには登録するメールアドレス
-dには認証するドメイン名
./certbot-auto certonly --webroot --agree-tos -w /usr/share/nginx/html -m jam330157@gmail.com -d httpsession.work
上記実行で下記ログを出力します。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for httpsession.work
Using the webroot path /usr/share/nginx/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/httpsession.work/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/httpsession.work/privkey.pem
Your cert will expire on 2019-01-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
証明書が作成されたか確認する
sudo ls -lrth /etc/letsencrypt/live/httpsession.work
total 4.0K
lrwxrwxrwx 1 root root 43 Oct 13 20:10 privkey.pem -> ../../archive/httpsession.work/privkey1.pem
lrwxrwxrwx 1 root root 45 Oct 13 20:10 fullchain.pem -> ../../archive/httpsession.work/fullchain1.pem
lrwxrwxrwx 1 root root 41 Oct 13 20:10 chain.pem -> ../../archive/httpsession.work/chain1.pem
lrwxrwxrwx 1 root root 40 Oct 13 20:10 cert.pem -> ../../archive/httpsession.work/cert1.pem
-rw-r--r-- 1 root root 682 Oct 13 20:10 README
上記のようになっていれば作成完了です。
ドメインについて
証明書を作成する際に、指定したドメインがサクラなどの場合、ドメインが振られておりますが、そのドメインでは作成できません、
なので、新規でドメインを作成さしてください。
ちなみに .workが安いです。
下記お名前.comのページになります。
nginx conf 編集
/etc/nginx/conf.d/rails.conf
upstream unicorn_server {
# This is the socket we configured in unicorn.rb
server unix:/tmp/unicorn.sock
fail_timeout=0;
}
server {
listen 80;
server_name httpsession.work;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
client_max_body_size 4G;
server_name httpsession.work;
keepalive_timeout 5;
ssl_certificate /etc/letsencrypt/live/httpsession.work/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/httpsession.work/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Location of our static files
root /usr/share/nginx/html;
location / {
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Host $http_host;
#proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
# If you don't find the filename in the static files
# Then request it from the unicorn server
if (!-f $request_filename) {
proxy_pass http://unicorn_server;
break;
}
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /usr/share/nginx/html;
}
}
nginx 再起動
$ sudo nginx -t
nginx: the configuration file /etc/nginx/rails.conf syntax is ok
nginx: configuration file /etc/nginx/rails.conf test is successful
$ sudo service nginx restart
Rails unicornの設定編集
config/environments/development.rb
下記を追加してください、コメントアウトされてれば、コメントを解除してください。
config.force_ssl = true
unicorn 再起動
$ kill -QUIT `cat /tmp/unicorn.pid`
$ bundle exec unicorn_rails -c config/unicorn.rb -E development -D
(☝︎ ՞ਊ ՞)☝︎ 完了!
参考にした記事
SSL周り
nginx 関連