LoginSignup
10
10

More than 5 years have passed since last update.

今さらながらnginx x fastcgiでphp5を動かす on debian

Posted at

いまではもう当たり前になってしまった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)

/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/ 以下に を作成

/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

起動すると

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

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10