設定ファイル@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.owner
とlisten.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
ファイルで設定されたboolean値のオプションを上書きし、他から上書きされないようにする。
全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。
▼ php_admin_flag[log_errors]¶
[www]
php_admin_flag[log_errors] = on
php_admin_value¶
▼ php_admin_valueとは¶
Apacheのみで使用できる。
PHPのini
ファイルで設定されたboolean値以外のオプションを上書きし、他から上書きされないようにする。
全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。
▼ 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
ファイルで設定されたboolean値のオプションを上書きする。
全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。
▼ php_value[display_errors]¶
Webページ上にエラーを表示するか否かを設定する。
[www]
php_flag[display_errors] = off
php_value¶
▼ php_valueとは¶
PHPのini
ファイルで設定されたboolean値以外のオプションを上書きする。
全てのオプションを上書きできるわけでなく、オプションごとの変更モードによる。
▼ 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