unoh.github.com

Ruby on Rails: mongrel_clusterのフロントエンドに nginxを使用する

Wed Feb 06 04:39:56 -0800 2008

こんにちは satoです。

nginx(えんじんえっくす)はロシアで開発されているwebサーバで、軽量、高速が売りのようです。もちろんvirtualhostやrewrite機能にも対応しています。今回はmongrel_clusterのフロントエンドに使ってみました。

mongrel_railsのインストールと環境構築


mongrel_railsをインストールします
gem istall mongrel_cluster --include-dependencies

設定ファイルを作ります。RAIL_ROOTで
mongrel_rails cluster::configure -e development -p 4000

とすると RAILS_ROOT/conf/mongrel_cluster.yml ができます。
--- 
log_file: log/mongrel.log
port: "4000"
environment: development
pid_file: tmp/pids/mongrel.pid
servers: 2

mongrel_clusterを起動します。
mongrel_rails cluster::start



nginxのインストールと環境構築


nginxは URIのrewrite機能 等に pcre を使うので、 pcre-develをインストールしておきます。
yum install pcre-devel

nginxをソースから入れます
wget http://sysoev.ru/nginx/nginx-0.5.35.tar.gz
./tar zxvf nginx-0.5.35.tar.gz
./configure --with-md5=/usr/lib --with-sha1=/usr/lib
make 
sudo make install

設定ファイルを編集します。
vi /usr/local/nginx/conf/nginx.conf
http {
  upstream mongrel_cluster {
    server localhost:4000;
    server localhost:4001;
  }
  server {
        root   html;
        location / {
            proxy_pass http://mongrel_cluster;
        }
  }
}

設定ファイルのフォーマット等テストをします。
sudo /usr/local/nginx/sbin/nginx -t
2008/02/06 20:47:55 [info] 4249#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2008/02/06 20:47:55 [info] 4249#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

起動します
sudo /usr/local/nginx/sbin/nginx

設定ファイルを以下のようにすれば静的ファイルは nginxが出力したりと、LVSと比べて Layer7の部分でいろいろできるかもしれないです。
  server {
    root   html;
    if (-f $request_filename) {
      rewrite (.*)$1 break;
    }
    if (!-f $request_filename) {
        proxy_pass http://mongrel_cluster;
      break;
    }
  }



-追記-
ごめんなさい 書いてから気がついたのですが
http://www.slideshare.net/zhesto/rails-deployment-with-nginx
とほとんど同じ内容でした。