NginxでPHPだけを動かすならphp-fpmを使えば設定も楽なんだけどMuninやらPHP以外のスクリプトをFastCGIで動かしている場合、もうspawn-fcgiで全部やっちゃえばいいのではというわけです。
$ spawn-fcgi -h Usage: spawn-fcgi [options] [-- <fgiapp> [fcgi app arguments]] options: -f <path> /usr/bin/php-cgi でいいけど非推奨なので -- <fcgiapp> を使う。 -a <address> 127.0.0.1 (Unix domain socketを使わない場合) -p <port> 9000 (Unix domain socketを使わない場合) -s <path> /var/run/spawn-fcgi/php-fcgi.sock (-a, -p を使わない場合) -C <children> (PHP only) PHP_FCGI_CHILDRENの値が入るけどデフォルトが0なので数値指定 -F <children> -C 使ってたらいいか (デフォルト 1) -u <user> nginx -g <group> nginx (nginx:nginx で実行してる) -U <user> Unix domain socketのユーザ -G <group> Unix domain socketのグループ
CentOS 6なら /etc/init.d/php-spawn-fcgi みたいな分かりやすい起動スクリプトを作って
start)
daemon /usr/bin/spawn-fcgi -s /var/run/spawn-fcgi/php-fcgi.sock -U nginx -u nginx -g nginx -P /var/run/spawn-fcgi/php-fcgi.pid -C 5 -- /usr/bin/php-cgi
あとは自動起動など
chkconfig php-spawn-fcgi on
/etc/init.d/php-spawn-fcgi start
Nginx側のfastcgi_passは↑で指定したやつにする
fastcgi_pass unix:/var/run/spawn-fcgi/php-fcgi.sock
これで、PHPに関してはServer API : CGI/FastCGIとして動く。
と、ここまで書いたけどphpfpm_status のようなこともできないし、宗教上の理由でもないかぎりphp-fpmを使った方がよいのではという感想。
/etc/init.d/php-spawn-fcgi の中身
#!/bin/sh # # php-spawn-fcgi # # chkconfig: 2345 86 16 # description: php spawn-fcgi service process # pidfile: /var/run/spawn-fcgi/php-fcgi.pid # Source function library. . /etc/rc.d/init.d/functions RETVAL=0 spawn_fcgi=/usr/bin/spawn-fcgi php_cgi=/usr/bin/php-cgi prog=`basename ${php_cgi}` pidfile=/var/run/spawn-fcgi/php-fcgi.pid lockfile=/var/lock/subsys/php-fcgi sockfile=/var/run/spawn-fcgi/php-fcgi.sock user=nginx group=nginx # PHP_FCGI_CHILDREN fcgi_children=5 # See how we were called. case "$1" in start) echo $"Starting $prog: " dir=$(dirname ${pidfile}) [ -d $dir ] || mkdir $dir chown ${user}:${group} $dir # spawn-fcgi daemon ${spawn_fcgi} -s ${sockfile} -U nginx -u ${user} -g ${group} -P ${pidfile} -C ${fcgi_children} -- ${php_cgi} spawn-fcgi RETVAL=$? if [ $RETVAL = 0 ]; then echo_success touch ${lockfile} else echo_failure fi echo ;; stop) echo -n $"Stopping $prog: " killproc -p ${pidfile} ${prog} RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} ;; status) status -p ${pidfile} ${prog} RETVAL=$? ;; restart|reload) $0 stop $0 start RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|status|restart|reload}" RETVAL=2 esac exit $RETVAL