コンテンツにスキップ

設定ファイル@PHP-FPM

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セットアップ

インストール

▼ aptリポジトリから

$ apt install php-fpm
$ apt-get install php-fpm


02. 設定ファイルの種類 (※ Dockerの場合)

/usr/local/etc/php-fpm.confファイル

php-fpm.confファイルとは

PHP-FPMの全てのプロセスを設定する。

設定ファイルを切り分ける場合、/etc/php-fpm.dディレクトリ配下に<実行ユーザー名>.confファイルの名前で配置する。

PHP-FPMの仕様として、異なる.confファイルで同じプールで同じオプションを設定した場合は、後ろにくる名前のファイルの設定が優先されるようになっている。

そのため、同じプールの設定を異なる.confファイルに分割する場合、同じオプションを設定しないように注意する。

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

include=/etc/php-fpm.d/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]

pid = /run/php-fpm/php-fpm.pid

error_log = /var/log/php-fpm/error.log

;syslog.facility = daemon
;syslog.ident = php-fpm
;log_level = notice
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0
;process.max = 128
;process.priority = -19

daemonize = yes

;rlimit_files = 1024
;rlimit_core = 0
;events.mechanism = epoll
;systemd_interval = 10

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;

; 同じプールの設定を異なるファイルに分割する場合は注意が必要である。
; See /etc/php-fpm.d/*.conf


/usr/local/etc/php-fpm.d/www.confファイル

www.confファイルとは

PHP-FPMのwwwプロセスのプールを設定する。

www.confファイルは、/usr/local/etc/php-fpm.dディレクトリ配下に配置されている。

php.iniファイルによって読み込まれ、php.iniファイルよりも優先されるので、設定項目が重複している場合は、こちらを変更する。

NginxからPHP-FPMにインバウンド通信をルーティングする場合、Nginxの設定ファイル (/etc/nginx/nginx.confファイル) とPHP-FPMの設定ファイル (/usr/local/etc/php-fpm.d/www.confファイル) の両方で、プロセスのユーザー名を『www-data』とする必要がある。

補足として、『www-data』はapacheプロセスのユーザー名のデフォルト値である。

zz-docker.confファイルについて

PHP-FPMのベースイメージにはzz-docker.confファイルが組み込まれており、このファイルにはPHP-FPMの一部の設定が実装されている。

PHP-FPMの仕様では、同じプールに同じオプションを設定した場合は、名前が後ろに来るファイルの設定が優先されるため、デフォルトのベースイメージではzz-docker.confファイルの設定が最優先になっている。

このファイルに後勝ちできるように、ホストではwww.confファイルとして定義しておき、コンテナ側にコピーする時はzzz-www.confファイルとする。

COPY ./php-fpm.d/www.conf /usr/local/etc/php-fpm.d/zzz-www.conf


/usr/local/etc/php-fpm.d/docker.confファイル

docker.confファイルとは

PHP-FPMをコンテナで稼働させるために必要な項目を設定する。ファイルは、/usr/local/etc/php-fpm.dディレクトリ配下に配置されている。

[global]
; /dev/stderr (標準エラー出力) へのシンボリックリンクになっている。
error_log = /proc/self/fd/2

; https://github.com/docker-library/php/pull/725#issuecomment-443540114
log_limit = 8192

[www]
; if we send this to /proc/self/fd/1, it never appears
; /dev/stderr (標準エラー出力) へのシンボリックリンクになっている。
access.log = /proc/self/fd/2

clear_env = no

; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
decorate_workers_output = no


03. globalセクション

error_log

標準エラー出力の出力先のファイルを設定する。

[global]
error_log = /var/log/php-fpm/error.log


pid

PIDの出力先のファイルを設定する。

[global]
pid = /run/php-fpm/php-fpm.pid


04. wwwセクション

wwwセクションとは

PHP-FPMのwwwプロセスのプールを設定する。


clear_env

デフォルトでは、環境変数の衝突や悪意ある注入を防ぐために、最初にプール内の環境変数を全て削除している。

これにより、設定ファイルに環境変数を出力できないようになっている。

この最初の削除処理を無効化する。

[www]
clear_env = no


env

プロセスのプール内に出力する環境変数を設定する。

この環境変数はPHPのプロセスで定義された環境変数ではないため、phpコマンドを直接的に実行しても確認できないことに注意する。

[www]
env[FOO] = foo
$ php -r 'echo ${FOO};' # プロセスが異なるため、何も出力されない。


group

プロセスの実行グループ名を設定する。

[www]
group = www-data


listen

作成されたUnixドメインソケットファイルの場所を設定する。

[www]
listen = /var/run/php-fpm/php-fpm.sock


listen.acl_users

コメントアウトが推奨である。

代わりとして、listen.ownerlisten.groupを設定する。

[www]
;listen.acl_users = apache,nginx


listen.allowed_clients

受信する通信のIPアドレスを設定する。

[www]
listen.allowed_clients = 127.0.0.1


listen.group

プロセスの所有グループ名を設定する。

[www]
listen.group = www-data


listen.mode

プロセスの実行権限を設定する。

[www]
listen.mode = 0660


listen.owner

プロセスの所有ユーザー名を設定する。

[www]
listen.owner = www-data


php_admin_flag

▼ php_admin_flagとは

Apacheのみで使用できる。

PHPのiniファイルで設定されたbool値のオプションを上書きし、他から上書きされないようにする。

全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。

▼ php_admin_flag[log_errors]

[www]
php_admin_flag[log_errors] = on


php_admin_value

▼ php_admin_valueとは

Apacheのみで使用できる。

PHPのiniファイルで設定されたbool値以外のオプションを上書きし、他から上書きされないようにする。

全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。

▼ php_admin_value[error_log]

エラーログの出力先を設定する。開発環境ではエラーログファイル (/var/log/php-fpm/www-error.log) に出力し、本番環境では標準エラー出力に出力すると良い。

[www]
php_admin_value[error_log] = /dev/stderr


php_flag

▼ php_flagとは

PHPのiniファイルで設定されたbool値のオプションを上書きする。

全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。

▼ php_value[display_errors]

Webページ上にエラーを表示するか否かを設定する。

[www]
php_flag[display_errors] = off


php_value

▼ php_valueとは

PHPのiniファイルで設定されたbool値以外のオプションを上書きする。

全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。

▼ php_value[session.save_handler]

セッションの保存形式を設定する。

デフォルト値はfiles形式でサーバー内に保存する。

redisレコード形式でセッションDB (例:PHP Redis、ElastiCache Redisなど) に保存するように設定もできる。

[www]
php_value[session.save_handler] = redis

▼ php_value[session.save_path]

セッションの保存場所のディレクトリを設定する。

保存形式にredisを設定した場合には、Redisのエンドポイントを設定できる。

デフォルト値は/var/lib/php/sessionディレクトリである。

[www]
php_value[session.save_path] = "tcp://foo-redis.*****.ng.0001.apne1.cache.amazonaws.com:6379"

▼ php_value[soap.wsdl_cache_dir]

[www]
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache


pm

子プロセス数の増減タイプを設定する。

staticの場合は、リクエスト数によらず一定数の子プロセスをメモリに割り当て、dynamicの場合はリクエスト数によって子プロセスを増減させる。

[www]
pm = dynamic


pm.max_children

子プロセスの最大数を設定する。

子プロセスの最大数は、同時に処理できるリクエストの最大数に相当する。

[www]
pm.max_children = 50


pm.max_spare_servers

アイドル状態にしておく子プロセスの最大数を設定する。

[www]
pm.max_spare_servers = 35


pm.min_spare_servers

アイドル状態にしておく子プロセスの最小数を設定する。

[www]
pm.min_spare_servers = 5


pm.start_servers

PHP-FPM起動時の子プロセス数を設定する。

[www]
pm.start_servers = 5


slowlog

システムログの出力先を設定する。

[www]
slowlog = /var/log/php-fpm/www-slow.log


user

プロセスの実行ユーザー名を設定する。

[www]
user = www-data