いまではもう当たり前になってしまったphp5をnginxでfastcgiとして動かす方法です。spawn-fcgiを使って構築します。Debian5とちょっと古めの環境ですが aptでspawn-fcgiを直接入れてあげれば問題ないと思います。
環境はさくらVPS上のdebianです。
1. nginx, php5関係のインストール
# apt-get update
# apt-get upgrade
# apt-get install nginx php5-cli php5-cgi php5-gd spawn-fcgi
debian5ではspawn-fcgiはaptから入れられません。
よりソースからspawn-fcgiをインストールしてください。
# wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
# tar zxvf spawn-fcgi-1.6.3.tar.gz
# cd spawn-fcgi-1.6.3
# ./configure
# make
# make install
2. php-fastcgiの作成と編集(spawn-fcgiのwrapper)
#! /bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -f /usr/bin/php5-cgi
# /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -f /usr/bin/php5-cgi
# chmod 755 /usr/bin/php-fastcgi
ソースからspawn-fcgiを入れた場合のパスは/usr/local/bin/spawn-fcgiになります。
またphp5-cgiが存在しなくともエラーは出ませんので注意してください。
3. /etc/init.d/php-fastcgiを作成
2で設定したようにfastcgiはデーモンとして駐在します。fastcgiを起動スクリプト。
/etc/init.d/ 以下に を作成
#!/bin/bash
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the php-fastcgi
# Description: starts the php-fastcgi
### END INIT INFO
PHP_SCRIPT=/usr/bin/php-fastcgi
FASTCGI_USER=www-data
RETVAL=0
PIDFILE=/var/run/php5-cgi.pid
case "$1" in
start)
su - $FASTCGI_USER -c $PHP_SCRIPT
pidof php5-cgi > $PIDFILE
RETVAL=$?
;;
stop)
killall -9 php5-cgi
echo '' > $PIDFILE
RETVAL=$?
;;
restart)
killall -9 php5-cgi
su - $FASTCGI_USER -c $PHP_SCRIPT
pidof php5-cgi > $PIDFILE
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
console output
# chmod 755 /etc/init.d/php-fastcgi
# update-rc.d php-fastcgi defaults
# /etc/init.d/php-fastcgi start
起動すると
zsh
`
spawn-fcgi: child spawned successfully: PID: 0000
というメッセージが出ます。
2142 ? Ss 0:00 /usr/bin/php5-cgi
2143 ? S 0:00 /usr/bin/php5-cgi
2144 ? S 0:00 /usr/bin/php5-cgi
2145 ? S 0:00 /usr/bin/php5-cgi
2146 ? S 0:00 /usr/bin/php5-cgi
2147 ? S 0:00 /usr/bin/php5-cgi
2148 ? S 0:00 /usr/bin/php5-cgi
デーモンとしてphp5-cgiが駐在します。
4. nginxの設定
# mkdir /var/www/yourhostname.com
# chown -R www-data:www-data /var/www/yourhostname.com
# vim /etc/nginx/nginx.conf
nginx.confの内容
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
server {
listen 80;
server_name yourhostname.com;
access_log /var/log/nginx/yourhostname.com.log;
error_log /var/log/nginx/yourhostname.com.error.log;
location / {
root /var/www/yourhostname.com;
index index.html index.htm index.php mtview.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/yourhostname.com$fastcgi_script_name;
}
}
}
設定ファイルの説明はそれほど必要ではないと思います。
ApacheでいうDirectoryIndexesがindex項目になり、DocumentRootがroot項目に。
ここではテンプレートだけを載せておきます。詳細は検索してください。私が実験した環境では自動で起動しないようになっていましたので
# update-rc.d nginx defaults
または、最近ではinsservを使って
# insserv php-fastcgi
nginxの起動
# /etc/init.d/nginx start # nginxの起動
2130 ? Ss 0:00 nginx: master process /usr/sbin/nginx
2131 ? S 0:00 nginx: worker process
としてnginxが駐在します。
その他エラーなど
nginxの設定ファイルのリロード、構文チェックは下記のとおりです。
リロード:nginx -t
構文チェック:nginx -s reload
あとは/var/www/yourdomain.comにindex.phpなどでphpを動かすだけです。
「No input file specified.」のエラーは
fastcgi_param SCRIPT_FILENAME /var/www/yourhostname.com$fastcgi_script_name;
のパスが間違っている場合。php cgiの場所が不明のエラーなどが考えられます。
参考:
http://library.linode.com/web-servers/nginx/php-fastcgi/ubuntu-10.04-lucid
http://wiki.nginx.org/FcgiExampleJa
http://hima-j.in/linux/sakura-vps-ubuntu-10-04-nginx-php-fastcgi-web-server/
http://wiki.nginx.org/Configuration