ec2 rails http→https接続 備忘録 Let's Encryptを使ってhttps対応
Let's Encryptで証明書取得
基本はこのページ(証明書の導入完了まで)
ec2のポート変更も行ったhttps
Nginxの設定
自分の場合ここの場所でDNSを設定してたのでここ(sudo vim /etc/nginx/conf.d/〇〇.conf)
server {
server_name 【ドメイン名(例:○○.com)】;
#listen80;
#listen 80→443に変更
listen 443 ssl default deferred;
ssl_certificate /etc/letsencrypt/live/test.hoge.jp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.hoge.jp/privkey.pem;
# <中略> #
}
location / {
add_header Access-Control-Allow-Origin *;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# httpsの設定をしてあげないとRailsの方でSSL判定できずに無限ループに陥る
proxy_set_header X-FORWARDED_PROTO https;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://app;
break;
}
}
# 以下を追記 ------------------------------------
# httpでのアクセスをhttpsに転送する設定です。
# ドメイン名は変更してください!
server {
listen 80;
server_name 【ドメイン名(例:○○.com)】;
return 301 https://$host$request_uri;
}
また、Railsの場合は、proxy_set_header X-FORWARDED_PROTO https;
を忘れずに。詳しい解説は以下が参考になります。
nginxを再起動します。
sudo service nginx restart
以上でSSLの設定は完了です。
ブラウザからこのサイトにアクセスしてみましょう。https接続になるはずです。
また、http://
として接続した場合でも、自動でhttps接続になるはずです。
自動更新の設定
作業はルートユーザーで行った
$ sudo su -
crontab -e # rootでcrontabを編集すれば、設定コマンド内でsudoを使わなくて済みます。
// 午前4時に自動更新をするcron登録
* * * * * command
分 時 日 月 曜日
分 | 時 | 日 | 月 | 曜 | |
---|---|---|---|---|---|
範囲 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7(0と7はSunday) |
全てワイルドカード[*]にすると、毎分実行。
また、[ , ]でand、[ / ]でステップ数、[ - ]で範囲を指定できる。
32 02 * * * 02:32に実行
*/10 * * * * 10分おきに実行
0-10 20 * * * 20:00から20:10まで 1分毎に実行
0,30 20 * * 2,4 毎週,火,木曜の 20:00と 20:30に実行
* 20 * * * 20:00から 20:59まで 1分おきに実行
0 1 * * * 1:00に実行
0 * * * * 毎時 0分に 1時間おきに実行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02に実行
※ --no-self-upgrade
を付ける事で、自動でバージョアップするのを防いでいます。(AWSドキュメントより)
※ --debug
を付けているのは、下記のエラーが出ないようにするためです。
※ --post-hook
で証明書更新後にNginxも再起動する様にしています。
設定後、cronデーモンを再起動します。
sudo service crond restart
参考サイト
[サーバー] Let's EncryptとNginxで、https対応を行う - YoheiM .NET
Amazon Linux + Rails + Nginx環境にLet's Encryptを導入する - Qiita
無料でHTTPS化できる「Let's Encrypt」をやってみた ※install.sh付き - Qiita
[Rails][Nginx][AWS] Let's EncryptをEC2上のRailsに入れてHttpsにする - Qiita
Let's Enctyptの証明書の更新関連のコマンドのメモ - Qiita