apacheからnginxへ移行その2

■PHP-FPMのインストールと設定
centos6.5に入っているphpのバージョンが古いので、
最新のパッケージを配布している「Remiリポジトリ」からPHPの最新版を導入します。

# cd /usr/local/src
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
# rpm -ivh epel-release-6-7.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -ivh remi-release-6.rpm

■諸々のインストール

# yum --enablerepo=remi install php-fpm php-mbstring php-xml php-mysql php-pdo php-mcrypt php-pecl-memcached php-pecl-msgpack

php -v
PHP 5.4.33 (cli) (built: Sep 20 2014 16:20:03)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

PHP-FPMの設定は/etc/php-fpm.d/www.confファイルで行う。
この辺りを参照。
http://sourceforge.jp/magazine/12/09/12/0517235/4

# vim /etc/php-fpm.d/www.conf

# PHP-FPMが待ち受けを行うポートの設定箇所
# UNIXドメインソケットの方が処理が早い。
listen = /var/run/php-fpm/php-fpm.sock

# 設定時に注意しなければならないのは、デフォルトで生成されたソケットファイルにはapacheまたはnginx権限では、
# ファイルアクセスできないため、listen.modeで0666を指定する必要があり。
listen.mode = 0666

# PHP-FPMの動作ユーザーおよびグループを指定
# 公開ディレクトリの権限も変更しておくべき。
user = nginx
group = nginx

# pm.max_childrenは同時に処理できるリクエストの最大数。
# pmがstaticの場合は作成される子プロセスの数。pmがdynamicの場合は作成される子プロセスの最大数。このオプションは必須。
pm.max_children = 15
# pm.start_serversは起動時に作成される子プロセスの数。
# pmがdynamicの場合にのみ使います。デフォルト値: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 5
# pm.min_spare_serversはアイドル状態のサーバープロセス数の最小値。
# pmがdynamicの場合にのみ使います。また、この場合には必須。
pm.min_spare_servers= 2
# pm.max_spare_serversはアイドル状態のサーバープロセス数の最大値。
# pmがdynamicの場合にのみ使います。また、この場合には必須。
pm.max_spare_servers = 5

この4項目のパラメータはサーバー状況にて変更する必要がありかも。

上記設定が完了したら、PHP-FPMを起動させて常駐させ、
OS起動時に動作するようchkconfigでの起動設定を行っておく。

# /etc/init.d/php-fpm start
# chkconfig php-fpm on
# chkconfig --list php-fpm
php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off

nginx設定ファイルのServer Blockへの追記

location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# nginxにもapacheにある設定ファイルの書式チェックコマンドがあります。

/etc/init.d/nginx configtest

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

“test is successful”となればOK

nginxを起動して、ブラウザからphpが動作するか確認。

# /etc/init.d/nginx start

※注意点 自分の場合は、phpmyadminでError: token mismatchが出た。
apacheと競合するので、PHP-FPM の設定ファイル/etc/php-fpm.d/www.conf
php_admin_value[session.save_path] =の指定ディレクトリをnginx用に用意するか、
既存のディレクトリをnginxに権限変更するとエラーが解消します。

次回はperlの巻