ec2 rails http→https接続 備忘録 Let's Encryptを使ってhttps対応

Let's Encryptで証明書取得

基本はこのページ証明書の導入完了まで)

www.yoheim.net

ec2のポート変更も行ったhttps

Nginxの設定

nginx.conf 

自分の場合ここの場所でDNSを設定してたのでここ(sudo vim /etc/nginx/conf.d/〇〇.conf)

nginx.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 のリバースプロキシ設定のメモ - Qiita

nginxを再起動します。

terminal
 
sudo service nginx restart

以上でSSLの設定は完了です。
ブラウザからこのサイトにアクセスしてみましょう。https接続になるはずです。
また、http://として接続した場合でも、自動でhttps接続になるはずです。

自動更新の設定

作業はルートユーザーで行った

$ sudo su -
terminal
 
crontab -e # rootでcrontabを編集すれば、設定コマンド内でsudoを使わなくて済みます。
crontab
 
0 4 * * * sudo certbot renew --no-self-upgrade --post-hook "service nginx restart"
// 午前4時に自動更新をするcron登録
crontab
 
*  *  *  *  * 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:0020: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デーモンを再起動します。

terminal
 
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