somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】php-fpmのインストール

php5.4とnginxをインストールしたので、php-fpmをインストールしてみました。

インストール

yumでインストールしました。php5.4をremi-testからインストールしたので、同様にリポジトリを指定しています。

yum --enablerepo=remi-test install php-fpm

インストールされたもの

以下のファイルやディレクトリが増えていました。

/etc/php-fpm.conf
/etc/logrotate.d/php-fpm
/etc/php-fpm.d/www.conf
/etc/rc.d/init.d/php-fpm
/etc/rc.d/rc0.d/K16php-fpm
/etc/rc.d/rc1.d/K16php-fpm
/etc/rc.d/rc2.d/K16php-fpm
/etc/rc.d/rc3.d/K16php-fpm
/etc/rc.d/rc4.d/K16php-fpm
/etc/rc.d/rc5.d/K16php-fpm
/etc/rc.d/rc6.d/K16php-fpm
/etc/sysconfig/php-fpm
/usr/sbin/php-fpm
/usr/share/fpm
/usr/share/doc/php-fpm-5.4.0
/usr/share/doc/php-fpm-5.4.0/php-fpm.conf.default
/usr/share/fpm/status.html
/usr/share/man/man8/php-fpm.8.gz
/var/log/php-fpm
/var/run/php-fpm

これより、以下のことが分かりました。

  • 基本設定(php-fpm.conf)と各種設定がある(/etc/php-fpm.d/)
  • サービスとして提供されている

設定については、http://www.php.net/manual/ja/install.fpm.configuration.phpが参考になりそうです。

/etc/rc.d/init.d/php-fpm

中身を見てみると、引数には以下のものがありました。

  • start
  • stop
  • status
  • restart
  • reload
  • force-reload
  • condrestart
  • try-restart

とりあえずは、最初の5つを覚えていればよさそうです。reloadは、設定ファイルの再読み込みです。apacheやnginxのモジュールとして動くわけではないので、httpサーバを再起動しても設定は反映されないとのことです。

自動起動

念のため、サービスに登録されているか確認しておきます。

chkconfig | grep php
php-fpm         0:off   1:off   2:off   3:off   4:off   5:off   6:off

下記コマンドで自動起動するようにします。

chkconfig php-fpm on

起動

プロセスが立ち上がると思いますので、起動前に確認しました。

ps aux | grep php
root     27549  0.0  0.1   5408   824 pts/2    S+   11:03   0:00 grep php

起動します。

service php-fpm start
php-fpm を起動中:                                          [  OK  ]

再度確認をします。

ps aux | grep php
root     27562  0.4  0.6  40624  3124 ?        Ss   11:03   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache   27563  0.0  0.5  40624  2708 ?        S    11:03   0:00 php-fpm: pool www
apache   27564  0.0  0.5  40624  2708 ?        S    11:03   0:00 php-fpm: pool www
apache   27565  0.0  0.5  40624  2708 ?        S    11:03   0:00 php-fpm: pool www
apache   27567  0.0  0.5  40624  2708 ?        S    11:03   0:00 php-fpm: pool www
apache   27568  0.0  0.5  40624  2708 ?        S    11:03   0:00 php-fpm: pool www
root     27570  0.0  0.1   5408   820 pts/2    S+   11:03   0:00 grep php

php-fpmの設定

なぜかapacheユーザで起動しています。設定ファイルからapacheを探してみました。

grep apache /etc/php-fpm.conf
# 出力なし
grep apache /etc/php-fpm.d/www.conf 
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
group = apache

www.confに記述されているユーザとグループを変更します。

vim etc/php-fpm.d/www.conf 
user = nginx
group = nginx

他にもいろいろな設定がありました。

[www]
listen = 127.0.0.1:9000
;listen.owner = nobody;
listen.group = nobody;
listen.mode = 0666
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
;pm.max_requests = 500

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_value[session.save_path] = /var/lib/php/session
php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 128M

リクエストの受付や、pm(プロセスマネージャ)、環境変数php関連などです。

php-fpm設定の反映

前述したとおり、nginxをを再起動しても設定は変わりません。以下のようにして反映してください。

service php-fpm restart
# または
service php-fpm reload

nginxの設定

メモ 【nginx】設定ファイルの編集【php】どおりに行いました。

index.phpの準備

phpinfo()を記述したファイルをドキュメントルートに作成します。

アクセス

http://ドメイン名/index.phpにアクセスして、phpinfoが表示されることを確認できました。

Server APIはFPM/FastCGIであり、cgi-fcgiphp-fpmはactiveになっていました。また、PHP Variablesにはnginxの設定で定義しているfastcgi_paramが表示されていました。

参考