Debian squeeze の nginx 上で CakePHP を動かしてみた

さくらVPS で一番安いサービスを利用するときにネックになるのがメモリ消費量。
メインメモリが 512MBしかなく、apache2 ではやや不安なので、nginx を使ってみようかと画策中。

Debian squeeze の nginx 上で php の環境を作るときに、参考にしたのがこちら。
http://library.linode.com/web-servers/nginx/php-fastcgi/debian-6-squeeze
標準のスクリプトでも構築できて、サードパーティ製のパッケージは不要なところが良い。
起動スクリプト (/etc/init.d/php-fastcgi) が微妙な感じだが、ほぼそのまま使ってみた。

/etc/init.d/php-fastcgi

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
PID_DIR=/var/run/php-fastcgi
PID_FILE=/var/run/php-fastcgi/php-fastcgi.pid
RET_VAL=0

PHP_SCRIPT() {
  ADDRESS=127.0.0.1
  PORT=9000
  CHILDREN=6
  PHP5=/usr/bin/php5-cgi
  SPAWN=/usr/bin/spawn-fcgi

  $SPAWN -a $ADDRESS -p $PORT -P $PID_FILE -C $CHILDREN \
         -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
}

case "$1" in
    start)
      if [[ ! -d $PID_DIR ]]
      then
        mkdir $PID_DIR
        chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR
        chmod 0770 $PID_DIR
      fi
      if [[ -r $PID_FILE ]]
      then
        echo "php-fastcgi already running with PID `cat $PID_FILE`"
        RET_VAL=1
      else
        PHP_SCRIPT
        RET_VAL=$?
      fi
  ;;
    stop)
      if [[ -r $PID_FILE ]]
      then
        kill `cat $PID_FILE`
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
        RET_VAL=1
      fi
  ;;
    restart)
      if [[ -r $PID_FILE ]]
      then
        kill `cat $PID_FILE`
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
      fi
      PHP_SCRIPT
      RET_VAL=$?
  ;;
    status)
      if [[ -r $PID_FILE ]]
      then
        echo "php-fastcgi running with PID `cat $PID_FILE`"
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE, php-fastcgi does not appear to be running"
      fi
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart|status}"
      RET_VAL=1
  ;;
esac
exit $RET_VAL

CakePHP 向けに nginx を設定するときに、参考にしたのがこちら。
http://d.hatena.ne.jp/hrendoh/20110101/1293887229

ただ if ディレクティブを使うよりも try_files を使った方がいいみたい ( http://wiki.nginx.org/IfIsEvil )。
/etc/nginx/sites-available/default

server {
  : (省略)
  location / {
    try_files $uri $uri/ /index.php?url=$uri&$args;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}