Nginx1.0.6でPHP5.3.8を使えるようにしてみる
FastCGI経由でNginxとPHPを連携できるようにしたい。
PHPはデフォルトでFastCGIプロトコルをサポートしているが、よりよく利用するために追加コンポーネントであるPHP-FPMを利用する。
図のとおり、PHP-FPMはオリジナルのPHPソースコードに適用するパッチという形でリリースされている。
※PHP5.3.3よりPHP-FPMはPHPに組み込まれている。configrue時に--enable-fpmオプションをつけるだけでOK.
PHP-FPMは以下のような事ができる。
・PHPをデーモン化し、バックグラウンドプロセスにする
・PHPプロセスを管理するコマンドラインスクリプトの提供
・ログの改良、IPアドレス制限など
導入方法
#先にこれらを導入しておく rpm -ivh MySQL-devel-5.5.15-1.linux2.6.x86_64.rpm rpm -ivh MySQL-client-5.5.15-1.linux2.6.x86_64.rpm rpm -ivh MySQL-shared-5.5.15-1.linux2.6.x86_64.rpm yum install libevent-devel libxml2-devel ./configure --prefix=/usr/local/php-5.3.8 --with-libdir=lib64 --enable-mbstring --enable-mbregex --with-pdo-mysql --with-mysql --with-gd --with-zlib=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr/local --with-curl --enable-sockets --enable-bcmath --enable-fpm make make install ln -s /usr/local/php-5.3.8 /usr/local/php cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf vim /usr/local/php/etc/php-fpm.conf ;pm.start_servers = 20 pm.start_servers = 20 ;pm.min_spare_servers = 5 pm.min_spare_servers = 5 ;pm.max_spare_servers = 35 pm.max_spare_servers = 35 ;pm.max_requests = 500 pm.max_requests = 500 ;user = nobody ;group = nobody user = httpd group = httpd #起動スクリプトコピー cp /home/work/php-5.3.8/sapi/fpm/init.d.php-fpm.in /etc/init.d/ #起動スクリプト編集 prefix=/usr/local/php exec_prefix=/usr/local/php/bin php_fpm_BIN=/usr/local/php/sbin/php-fpm php_fpm_CONF=/usr/local/etc/php-fpm.conf php_fpm_PID=/var/run/php-fpm.pid /etc/init.d/php-fpm start
とりあえずここまでで問題発生。
Starting php-fpm ............... failed
となり起動に失敗してしまう。
が、プロセスを見るとどうやら起動できている…。
[root@localhost ~]# ps aux | grep php-fpm root 15531 0.0 0.3 145336 3544 ? Ss 01:07 0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf) httpd 15532 0.0 0.3 145336 3200 ? S 01:07 0:00 php-fpm: pool www httpd 15533 0.0 0.3 145336 3200 ? S 01:07 0:00 php-fpm: pool www httpd 15534 0.0 0.3 145336 3200 ? S 01:07 0:00 php-fpm: pool www
んーなんだろ。
==========2011/09/14 追記 =========
PHP動かせました。
というかやっぱり動いてました。
nginxとの連携設定が抜けていただけだったようです。
起動スクリプトでfailedになるのは変わらず…。
とりあえず設定をのせておきます。
/usr/local/nginx/conf/nginx.conf
に
location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params;
の項目がコメントアウトされていると思うので、これを有効にしましょう。
そりゃ.phpへの設定が無効化されてれば動かないですよね…。
nginxを再起動して、
/etc/init.d/nginx restart
あとはドキュメントルート(デフォルトだと/usr/local/nginx/html/)にindex.phpを作成しましょう。
vi /usr/local/nginx/html/index.php
<?php phpinfo(); ?>
http://サーバ名/index.php
にアクセスしてphpinfoが表示されていれば成功です。