さくら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;
}
}
