Rails + Nginx の環境でHTTPSアクセスをする方法です。
次のような感じでHTTPSアクセスに変更します。
- 変更前:http://www.example.com -> (Rails) http://127.0.0.1:3000
- 変更後:https://www.example.com -> (Rails) http://127.0.0.1:3000
環境
- Rails 5.0.0 (+デフォルトのPuma)
- Nginx 1.4.6
ステップ1. Nginxの設定
/etc/nginx/nginx.conf
を次のように設定します。
Rails側のアプリケーションサーバーを127.0.0.1:3000
で立ち上げている場合を想定しています。
ssl_certificate
, ssl_certificate_key
に指定するサーバー証明書は事前に配置しておきます。自己署名証明書の作り方は『OpenSSL 自己署名証明書(オレオレ証明書)を作成する』を参照ください。
server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/nginx/conf.d/www.example.com.crt; ssl_certificate_key /etc/nginx/conf.d/www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass http://127.0.0.1:3000; } }
ポイントは、HTTPSアクセスであることをX-Forwarded-Proto
でRailsへ通知する点です。これがないと『リダイレクトが繰り返し行われました。』のようなメッセージがブラウザで表示されます。
ステップ2. Railsの設定
/config/environments/development.rb
または production.rb
を開き、SSHアクセスを強制させます。
Rails.application.configure do config.force_ssl = true end
以上でHTTPSアクセスができます。
参考サイト