HTTPS編: FreeBSDでRedmineを動かす(FreeBSD+nginx+thin+Redmine+SQLite3)

 HTTPSRedmineにアクセスするための設定を行う。

サーバー証明書や鍵の準備

 opensslで秘密鍵・公開鍵を作り、証明書を作成する。*1

# cd /etc/ssl
# openssl genrsa -des3 -out cert.key 1024
# openssl req -new -key cert.key -out cert.csr
# openssl x509 -in cert.csr -out cert.pem -req -signkey cert.key -days 365
# chmod 400 cert.*

(opensslコマンドは対話的に動作するが、ここでは動作の様子は省略した。)

nginxの設定

 前回HTTP用に追記した部分をHTTPS用に書き換える。

server {
  listen 443;
  server_name host.example.com;

  ssl on;
  ssl_certificate /etc/ssl/cert.pem;
  ssl_certificate_key /etc/ssl/cert.key;

  ssl_session_timeout  5m;

  ssl_protocols  SSLv2 SSLv3 TLSv1;
  ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  ssl_prefer_server_ciphers   on;

  root /usr/local/www/nginx;
  proxy_redirect off;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
    proxy_read_timeout 300;

    proxy_pass http://redmine;
  }
}

 ここで、

    proxy_set_header X-Forwarded-Proto $scheme;

の行は重要である。これを忘れると、Redmine上で何かデータの入力・変更を行うたびに、https://〜ではなくhttp://〜で始まるURLに飛ばされてしまう。

 設定を終えたら動作を確認する。

# nginx -t
# nginx -s reload
# links https://host.example.com/

おまけ: Redmineをサブディレクトリでホストする時の設定

 https://host.exmple.com/redmine/のようにサブディレクトリ付きでRedmineを動かす場合、/usr/local/etc/thin/redmine.ymlに以下の行を追記する。*2

prefix: /redmine

 または、thinのコマンドラインに "--prefix /redmine" を追加してredmine.ymlを作成する。

 設定を変更したらブラウザーで確認する。

# /usr/local/etc/rc.d/thin restart
# links https://host.exmple.com/redmine/

*1:今回は自己署名で済ませている。

*2:nginxの設定を変更する必要はない。