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) が微妙な感じだが、ほぼそのまま使ってみた。
#!/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; } }