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設定は終わりとする。
また環境設定ができたため、これから作成するスタディにはできるだけリアルタイム処理を加え、様々なパターン検証を行うことにした。