あーかいぶすハイディフィニション

ここはもう更新しとらんのじゃ

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 ファイルで一つのペア、と覚えるといいでしょう。
逆にするとエラーでるよ。

参考:Configuring HTTPS servers

Ruby on Railshttps 通信を利用する場合の注意

「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 RailsSSL 通信を行う設定を記述してやらないと、頑なに 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