fastcgiが一番ややこしかったのでメモしておきます。下記環境はdebian5です。
環境はさくら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から入れられません。
http://redmine.lighttpd.net/projects/spawn-fcgi
よりソースから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)
# vim /usr/bin/php-fastcgi
#! /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/ 以下に を作成
# vim /etc/init.d/php-fastcgi
#!/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
起動すると
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