nginx x fastcgiでphp5を動かす on debian



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

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です