さくらのVPS設定[9]-NginxでPHP-FPMを使う。

NginxでPHPを使おうとした場合、別プロセスで動くPHPとFastCGIでのソケット経由でやり取りを行うことになる。これを管理するモジュールの一つにPHP-FPMというものがあり、今回はそれを使用することにする。

こちらのサイトにもPHP-FPMの詳しい説明が書かれてありとても参考になった。
apache のかわりにnginxを使ってみる(2) php-fpmをインストールする

PHPそのものもインストールされていないので、そちらのインストールも説明していく。
PHPは5.3.3まではパッチを当てる必要がある。それ以降であればPHP-FPMが予め組み込まれておりパッチを当てる必要は無い。そのため、レポジトリ登録したら一度確認をしてからインストール作業に入る。

PHPとPHP-FPMのインストール

今回のインストールでは、こちらのサイトを基本として参考にさせて頂いた。
CentOSにNginx + php-fpmをInstall、設定してWordPressを動かす

ただし、上記サイトではCentOS 5.8 32bitであり、契約した環境はCentOS6.2 64bitなため下記が違う。
・remiのレポジトリはcentOS6版を入れる。5までとは違う。
・epelリポジトリはcentOS6ではインストール済みなので、入れる必要はない。

標準のリポジトリにはphp-fpmがないため、REMIレポジトリを追加する。

# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -ivh remi-release-6.rpm

yumを確認するとphp-fpmも存在し、PHPは5.3.13なのでパッチを当てる必要はないようだ。

# yum list --enablerepo=remi | grep php
php.x86_64       5.3.13-1.el6.remi   remi  
・・・
php-fpm.x86_64   5.3.13-1.el6.remi   remi 
・・・

インストールするPHPと関連ライブラリは以下にしておいた。
php ;本体
php-fpm ;PHP FastCGI Process Manager FastCGIを動かすためのライブラリ
php-devel ;PHP拡張用のライブラリ
php-cli ;コマンドラインでPHPを使えるようにする
php-xml ;PHPでXMLを取り扱うライブラリ
php-mbstring ;マルチバイト言語を扱うためのライブラリ
php-gd ;PHP用グラフィックライブラリ

ライブラリ情報はyum infoで調べることができる。

# yum info php-xml  --enablerepo=remi

インストールする。

# yum install php php-fpm php-devel php-cli php-xml  php-mbstring php-gd --enablerepo=remi
・・・
Installed:
  php.x86_64 0:5.3.13-1.el6.remi            php-cli.x86_64 0:5.3.13-1.el6.remi        php-devel.x86_64 0:5.3.13-1.el6.remi          
  php-fpm.x86_64 0:5.3.13-1.el6.remi        php-gd.x86_64 0:5.3.13-1.el6.remi         php-mbstring.x86_64 0:5.3.13-1.el6.remi       
  php-xml.x86_64 0:5.3.13-1.el6.remi       

Dependency Installed:
  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1    httpd.x86_64 0:2.2.15-15.el6.centos.1    httpd-tools.x86_64 0:2.2.15-15.el6.centos.1   
  libXpm.x86_64 0:3.5.8-2.el6               libxslt.x86_64 0:1.1.26-2.el6            php-common.x86_64 0:5.3.13-1.el6.remi         
  t1lib.x86_64 0:5.1.2-6.el6_2.1           

Complete!

# php -v
PHP 5.3.13 (cli) (built: May  9 2012 16:43:49) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

インストールして、ディレクトリチェックしていたら、なんか馴染んだものがvar/wwwに入ってしまってる。
ログを良く見ると、httpdがインストールされてしまっていた。
ということで、var/www/に入っていたnginx扱いのデータはvar/webdev/へと移動することにした。

php-fpmとnginxの設定

/etc/php-fpm.confはそのままで変更なし。

/etc/php-fpm.d/www.confでポートの確認(9000)をし、userとgroupをnginxへ変更する。

#vi /etc/php-fpm.d/www.conf
・・・・
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
・・・・
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

引き続き、nginx.confを変更しphpが使えるようにする。
大半はコメントアウトされていたのを消すことで大丈夫なようだ。

# 念の為にphpディレクトリを作成しbasic認証をかけテストゾーンにした。
location = /php/index.php {
    alias 		/var/webdev/php/;
    auth_basic    	"PHP test";
    auth_basic_user_file    "/var/webdev/php/.htpasswd";
    fastcgi_pass   	127.0.0.1:9000;
    fastcgi_index  	index.php;
    fastcgi_param  	SCRIPT_FILENAME /var/webdev/$fastcgi_script_name;
    include		fastcgi_params;

}

# rootはserverと同じなので設定せず。SCRIPT_FILENAMEのパス変更。
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ /*\.php$ {
#   root   		/var/webdev/index/html;
    fastcgi_pass   	127.0.0.1:9000;
    fastcgi_index  	index.php;
#   fastcgi_param       SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    fastcgi_param  	SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include		fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
    deny  	all;
}

phpディレクトリを作成し、パスワードを暗号化して.htpasswdにいれる。

# mkdir /var/webdev/php
# cd /var/webdev/php
# vi .htpasswd

php-fpmを起動し、nginxを再起動する。

# /etc/rc.d/init.d/php-fpm start
# /etc/init.d/nginx restart

phpinfoを出力してみる。

# echo '<?php echo phpinfo(); ?>' > index.php

ブラウザで確認して大丈夫だったら、php-fpmの自動起動設定をする。

# chkconfig php-fpm on
# chkconfig --list php-fpm

これでphpがnginxでも使えるようになった。
もしもサブドメイン使用するアプリ作成した場合は、アプリにより設定が変わる可能性があるので、projectsディレクトリ以下にあるアプリごとのconfへphpの設定を書くことにした。

wordpressについては気が向いたらいつか行う事にして、ここまででとりあえずVPS設定は終わりとする。
また環境設定ができたため、これから作成するスタディにはできるだけリアルタイム処理を加え、様々なパターン検証を行うことにした。

Submit a Comment

Spam Protection by WP-SpamFree