FAT47の底辺インフラ議事録

学んだことのメモ帳です

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が表示されていれば成功です。