nginx + thin
やってみた。
色々と試行錯誤した結果なんとか安定したのでその手順をメモしておく。
インストール
nginx からソースを落としてビルドする。
$ ./configure –prefix=/usr/local
$ make
$ sudo make install
Thin - yet another web server は RubyGems でインストールする。
$ sudo gem install thin eventmachine
設定
thin の設定はコマンドラインでサンプルファイルを生成して、 /etc/thin 以下へコピーするだけ。 サーバの数を増やしすぎると、パフォーマンスが悪くなるので程々にしておく。 うちの場合は Rails アプリが三つあるのでそれぞれに二つずつサーバを起動するようにした。
# 三つずつにした場合は極端にパフォーマンスが悪化した。
$ thin config -C thin.yml -s2 -S /tmp/thin-qa.sock -u www-data -g www-data
$ vim thin.yml # 都合に合わせて編集する。
$ sudo cp thin.yml /etc/thin/
$ sudo thin install # /etc/init.d/thin を作成する
nginx の設定は Main - Nginx Wiki を参照して行う。
# 一部抜粋
# backend settings
upstream thin-typo {
server unix:/tmp/thin-typo.0.sock;
server unix:/tmp/thin-typo.1.sock;
}
# virtual host settings
# typo (blog)
server {
listen 80;
server_name typo.okkez.net;
access_log logs/typo.access.log main;
root /home/kenji/ruby/typo/public;
index index.html;
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_redirect off;
# static files
if (-f $request_filename){
break;
}
# rails caching
if (-f $request_filename.html){
rewrite (.*) $1.html break;
}
# dynamic request
if (!-f $request_filename){
proxy_pass http://thin-typo;
break;
}
}
}
移行
- Apache の設定を変更 (Listen 8080 にする)
- thin を起動
- Apache を再起動
- nginx を起動
- 動作確認
以降の設定変更は気をつける。
- thin -C 設定ファイル restart
- kill -HUP nginx の pid (pid ファイルを参照) ** すぐには反映されないので注意する
- Apache は普通に再起動する
はまったポイント
- proxy の設定
- rewrite の設定
- 設定の再読み込みが出来ていなかったこと (kill -HUP pid)
疑問点
- 特定のアプリで prototype.js の読み込みはすぐに終わるのにその後の動きが鈍い ** 読み込まなければ速い
Posted in Ruby, Debian | コメントはありません |