nginx + thin

Posted by okkez Mon, 01 Sep 2008 09:30:00 GMT

やってみた。

色々と試行錯誤した結果なんとか安定したのでその手順をメモしておく。

インストール

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 , | コメントはありません |