[server] apache + passengerを捨ててnginx + thinにしてみた

nginx と thinの組み合わせが速いらしいので変更してみることにした。

現在運用しているのは

webdavについては別途書くとしてとりあえずrailsアプリとSinatraアプリをthinに。リバースプロキシをnginxにしてみる。

ちなみに環境はCentOS 4.6

以下作業ログ

nginxのインストール

$ sudo su -
# cd /usr/local/src
# wget http://nginx.org/download/nginx-0.7.65.tar.gz
# yum install pcre-devel zlib-devel openssl-devel
# tar -zxvf nginx-0.7.65.tar.gz
# cd nginx-0.7.65
// configure の参考 http://wiki.nginx.org/NginxInstallOptions
// 上記のExample2に--with-sha1あたりを足してconfigureしてみる
# ./configure \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --http-log-path=/var/log/nginx/access.log \
    --with-http_dav_module \
    --http-client-body-temp-path=/var/lib/nginx/body \
    --with-http_ssl_module \
    --http-proxy-temp-path=/var/lib/nginx/proxy \
    --with-http_stub_status_module \
    --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
    --with-debug \
    --with-http_flv_module \
    --with-sha1-asm \
    --with-sha1=/usr/include
# make
# make install

とりあえずポート8080番で動かしてみる

# vi /etc/nginx/nginx.conf
server {
    listen       8080; # 8080番にする
    server_name  localhost;
    #access_log  logs/host.access.log  main;
# /usr/local/nginx/sbin/nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
// OKが出たので起動
# /usr/local/nginx/sbin/nginx
# lsof -i :8080
COMMAND  PID   USER   FD   TYPE    DEVICE SIZE NODE NAME
nginx   6886   root    6u  IPv4 580333295       TCP *:webcache (LISTEN)
nginx   6887 nobody    6u  IPv4 580333295       TCP *:webcache (LISTEN)

thinのインストール

# gem install thin

redmineをthin(でしかもunix socket)で動かす

# mkdir -p /tmp/thin
# chmod 777 /tmp/thin
# su - redmine
$ cd /var/www/redmine
$ thin start -e production -s -4 --socket /tmp/think/redmine.sock
$ ls /tmp/thin/
redmine.0.sock  redmine.1.sock  redmine.2.sock  redmine.3.sock

unix socketなthinにnginxからアクセスできるようにする

# vi /etc/nginx/nginx.conf
// httpセクションの一番最後に下記のincludeを入れる
    include  /etc/nginx/sites-enable/*;
}
# mkdir /etc/nginx/sites-{available,enable}
// このあたりのディレクトリ構成はDebianのapacheをパクっている
# vi /etc/nginx/sites/available/redmine
server{
  listen 8080;
  server_name redmine.ya-lab.org;
  location / {
    proxy_pass http://redmine;
  }
}
upstream redmine{
  server unix:/tmp/thin/redmine.0.sock;
  server unix:/tmp/thin/redmine.1.sock;
  server unix:/tmp/thin/redmine.2.sock;
  server unix:/tmp/thin/redmine.3.sock;
}

# cd /etc/nginx/sites-enable/
# ln -s ../sites-available/redmine 001-redmine
# /usr/local/nginx/sbin/nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
# /usr/local/nginx/sbin/nginx -s reload

この状態でredmine.ya-lab.org:8080にブラウザからアクセスしてみると見事redmineの画面が表示された。
しかもわりと速いように感じる。

引き続きsinatraアプリケーション

$ cd /path/to/sinatra_app
$ mkdir -p log tmp/pids public
$ thin -s 4 -R config.ru --socket /tmp/thin/sinatra.sock start
$ sudo su -
# vi /etc/nginx/sites-available/sinatra
server{
  listen 8080;
  server_name sinatra.ya-lab.org;
  location / {
    proxy_pass http://sinatra;
  }
}

upstream sinatra{
  server unix:/tmp/thin/sinatra.0.sock;
  server unix:/tmp/thin/sinatra.1.sock;
  server unix:/tmp/thin/sinatra.2.sock;
  server unix:/tmp/thin/sinatra.3.sock;
}
# cd /etc/nginx/sites-enable
# ln -s ../sites-available/sinatra 002-sinatra
# /usr/local/nginx/sbin/nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
# /usr/local/nginx/sbin/nginx -s reload

とりあえず動かすことには成功。
initスクリプトの整備やWebdavについてはまた後日まとめる。