Nginx に SSL 証明書を入れて https 通信させる
させたい、させる(迫真)。
https も http も通信させたい
Nginx の server 句内を以下のように記述する。
listen 80; listen 443 ssl; server_name ssl.example.com; charset utf-8; access_log /var/log/nginx/ssl.example.com.nginx_access.log deflate; ssl_certificate /etc/nginx/ssl_certfile/ssl.example.com.cert; ssl_certificate_key /etc/nginx/ssl_certfile/ssl.example.com.key;
https も http も利用可能になる、わりとざるな設定。
https だけ通信させたい
Nginx の server 句内に以下のように記述する。
listen 443; server_name ssl.example.com; charset utf-8; access_log /var/log/nginx/ssl.example.com.nginx_access.log deflate; ssl on; ssl_certificate /etc/nginx/ssl_certfile/ssl.example.com.cert; ssl_certificate_key /etc/nginx/ssl_certfile/ssl.example.com.key; ssl_protocols SSLv3 TLSv1; ssl_ciphers HIGH:!ADH:!MD5;
こんだけ。なお注意としては、「ssl_certificate」に設定している証明書ファイルは、サーバ証明書→中間証明書の順で記述する必要があります。具体的にいうと以下。
・ssl.example.com.crt:サーバ証明書 ・CA.txt:中間証明書 [root@localhost ssl_certfile]# cut ssl.example.com CA.txt > ssl.example.com.cert
どっちのファイルも「-----BEGIN CERTIFICATE-----」で始まるからわかりづらいだろうけど、ファイルの先頭に記述された「-----BEGIN CERTIFICATE-----」から「-----END CERTIFICATE-----」までの中身と key ファイルで一つのペア、と覚えるといいでしょう。
逆にするとエラーでるよ。
Ruby on Rails で https 通信を利用する場合の注意
「proxy_set_header X-FORWARDED_PROTO https;」を設定しないと、Rails 側で通信が https か http か区別できない為、無限ループになります。下記のように、Nginx へ設定を入れてやりましょう!
location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-FORWARDED_PROTO https; #これが必要 proxy_redirect off; if (!-f $request_filename) { proxy_pass http://127.0.0.1:3000; break; } }
また、Ruby on Rails も SSL 通信を行う設定を記述してやらないと、頑なに http で通信しようとします、悲しいな。
[user@localhost rails_root]# vi config/enviroments/production.rb config.force_ssl = true
これでおk。
参考:http://o.inchiki.jp/obbr/24
参考:Nginx + SSL + Rails -- BONNOH FRACTION 14