altere5's blog

I thought what I'd do was, I'd pretend I was one of those deaf-mutes. ( or shou'd i ? )

PHP-FPMの導入とnginxとの連携とか

CentOS6(6.4)上でPHP-FPMを導入してnginxと連携した時のお話。

なお、nginxの導入はコチラを参考にして下さい。

なお、さくらのVPSではEPELリポジトリは標準で追加されている状態の為、その部分の手順は省略。

(1) PHP-FPMのインストール

PHP-FPMの導入はyumのみOK。

yum install php-fpm

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php-fpm.x86_64 0:5.3.3-23.el6_4 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-23.el6_4 for package: php-fpm-5.3.3-23.el6_4.x86_64
--> Running transaction check
---> Package php-common.x86_64 0:5.3.3-23.el6_4 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch           Version                Repository       Size
================================================================================
Installing:
 php-fpm            x86_64         5.3.3-23.el6_4         updates         1.1 M
Installing for dependencies:
 php-common         x86_64         5.3.3-23.el6_4         updates         524 k

Transaction Summary
================================================================================
Install       2 Package(s)

Total download size: 1.7 M
Installed size: 6.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): php-common-5.3.3-23.el6_4.x86_64.rpm              | 524 kB     00:00
(2/2): php-fpm-5.3.3-23.el6_4.x86_64.rpm                 | 1.1 MB     00:00
--------------------------------------------------------------------------------
Total                                           3.0 MB/s | 1.7 MB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : php-common-5.3.3-23.el6_4.x86_64                             1/2
  Installing : php-fpm-5.3.3-23.el6_4.x86_64                                2/2
  Verifying  : php-common-5.3.3-23.el6_4.x86_64                             1/2
  Verifying  : php-fpm-5.3.3-23.el6_4.x86_64                                2/2

Installed:
  php-fpm.x86_64 0:5.3.3-23.el6_4

Dependency Installed:
  php-common.x86_64 0:5.3.3-23.el6_4

Complete!

(2) PHP-FPMの設定

基本的な動作のみを想定する為、最小限の変更のみ行う。
実行ユーザ及びグループをnginx側と合わせるよう設定を変更。

vi /etc/php-fpm.d/www.conf

具体的な変更箇所は以下の部分。

; 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

「user」「group」の両方に「apache」が指定されているので「nginx」に変更した。

(3) 自動起動の設定

サーバ起動時に自動でPHP-FPMが起動するよう設定。

chkconfig php-fpm on

(4) PHP-FPMの起動

導入直後はPHP-FPMが起動していない為、手動で起動。

service php-fpm start

(5) nginxとの連携

PHP-FPMは標準では9000ポートを待ち受けとして利用。
取り急ぎ標準ポートのままでPHPを処理する場合nginxがPHP-FPMを呼び出すようにnginx側の設定を変更する。

nginxをyumで導入した場合、サービスに関する設定は「/etc/nginx/conf.d/default.conf」を修正して行う。

vi /etc/nginx/conf.d/default.conf

該当ファイルの28行目から36行目付近にコメントアウトされた部分がサンプルとなるので、以下のように修正して利用する。

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           $document_root;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

30行目から36行目のコメントを解除。
31行目のドキュメントルートには「$document_root」を指定。
34行目の「fastcgi_param」に関する設定を「/scripts$fastcgi_script_name」から「$document_root$fastcgi_script_name」に変更。

以上で設定変更は完了。

なお、設定内容の変更を行った為、設定ファイルのリロードを実施。

service nginx reload

(6) 動作確認

実際にPHPが実行されるか確認を行う。
確認スクリプトは以下のものを使用。

<?php
    phpinfo();

ブラウザからアクセスし「phpinfo」の内容が正常に表示され「Server API」の項目が「FPM/FastCGI」となっていればOK。