FPM では、php.ini 形式の構文の設定ファイル php-fpm.conf と、プール設定ファイルを使います。
pid
string
PID ファイルへのパス。デフォルト値: なし
error_log
string
エラーログファイルへのパス。デフォルト値:
#INSTALL_PREFIX#/log/php-fpm.log
"syslog" と設定すると、ログをローカルファイルに書き出すのではなく、syslogd に送信します。
log_level
string
エラーログのレベル。使用可能な値: alert, error, warning, notice, debug、デフォルト値: notice
log_limit
int
1024文字以上のログメッセージを、 改行せずにロギングできる文字数の上限。 デフォルト値: 1024 PHP 7.3.0 以降で利用可能
log_buffering
bool
追加のバッファリングを行わずに実験的なロギングを行う デフォルト値: yes PHP 7.3.0 以降で利用可能
syslog.facility
string
メッセージを記録するプログラムの種別。 デフォルト値: daemon
syslog.ident
string
すべてのメッセージの先頭に付加する内容。 複数の FPM インスタンスを同一サーバー上で実行する場合には、 デフォルト値を変更すれば区別できるようになります。 デフォルト値: php-fpm
emergency_restart_threshold
int
emergency_restart_interval
で設定された間隔で
この数以上の子プロセスが SIGSEGV あるいは SIGBUS で終了した場合に
FPM は再起動します。0 は 'オフ' を意味します。デフォルト値: 0 (オフ)
emergency_restart_interval
mixed
emergency_restart_interval が緩やかな再起動をいつ実行するかを決めるときに使う間隔。 これは、アクセラレータの共有メモリが壊れてしまったときの回避策として有用です。 使用可能な単位: s(秒), m(分), h(時間) あるいは d(日)、 デフォルトの単位: 秒、デフォルト値: 0 (オフ)
process_control_timeout
mixed
子プロセスが、マスタからのシグナルの反応を待つ最大時間。 使用可能な単位: s(秒), m(分), h(時間) あるいは d(日)、 デフォルトの単位: 秒、デフォルト値: 0
process.max
int
FPM がフォークするプロセスの最大数。 多数のプール内で動的な PM を使う場合に、全体のプロセス数を制御するために用意されたものです。 気をつけて使うようにしましょう。 デフォルト値: 0
process.priority
int
マスタープロセスに適用する nice(2) 値。 -19 (優先度最高) から 20 (優先度最低) までの値を指定します。 デフォルト値: 未設定
daemonize
bool
FPM をバックグラウンドに送る。'no' にすると デバッグ用に FPM をフォアグラウンドに置き続けます。 デフォルト値: yes
rlimit_files
int
マスタープロセス用の、オープン時のファイル記述子の rlimit。 デフォルト値: システムで定義されている値
rlimit_core
int
マスタープロセス用の、最大コアサイズの rlimit。 デフォルト値: 0
events.mechanism
string
FPM が利用するイベントメカニズム。 select、pool、epoll、kqueue (*BSD)、port (Solaris) が利用可能。 デフォルト値: 未設定 (自動検出)
systemd_interval
int
FPM を systemd 統合込みでビルドした場合に、 ヘルスチェックのレポートを systemd に送る間隔 (秒単位)。 0 にすると、無効化されます。 デフォルト値: 10
FPM を使うと、複数のプロセスプールをそれぞれ別の設定で実行することができます。 プール単位での設定を行う項目を以下に示します。
listen
string
FastCGI リクエストを受け入れるアドレス。 'ip.add.re.ss:port', 'port', '/path/to/unix/socket' 形式の構文が使えます。 このオプションは、各プール単位で必須となります。
listen.backlog
int
listen(2) のバックログを設定します。
-1
はBSD 系のシステムでは最大値を意味します。
デフォルト値: -1
(FreeBSD や OpenBSD)
または 511
(Linux やその他のプラットフォーム)
listen.allowed_clients
string
接続を許可されている FastCGI クライアントの IPv4 または IPv6 アドレス一覧。オリジナル版 PHP FastCGI (5.2.2+) における環境変数 FCGI_WEB_SERVER_ADDRS と同じです。 tcp でリスンするソケットに対してのみ意味をなします。 書くアドレスはカンマ区切りで指定します。この値を空にしておくと、任意の ip アドレスからの接続を許可します。 デフォルト値: 任意の ip アドレスを許可。
listen.owner
string
unix ソケットを使う場合に、そのパーミッションを設定します。Linux では、 読み書きアクセス権限を設定しないとウェブサーバーからの接続を受け付けることができません。 多くの BSD 由来のシステムでは、パーミッションにかかわらず接続を受け付けることができます。 デフォルト値: ユーザーとグループは実行しているユーザーと同じ、モードは 0660
listen.group
string
listen.owner
を参照ください。
listen.mode
string
listen.owner
を参照ください。
listen.acl_users
string
POSIX の Access Control List をサポートしている場合は、このオプションでそれを指定できます。
これを設定した場合は、listen.owner
および listen.group
は無視されます。
値には、ユーザー名をカンマ区切りのリスト形式で指定します。
listen.acl_groups
string
listen.acl_users
を参照。
グループ名を、カンマ区切りのリスト形式で指定します。
user
string
FPM プロセスの unix ユーザー。このオプションは必須です。
group
string
FPM プロセスの unix グループ。未設定の場合は、デフォルトのユーザーのグループを使います。
pm
string
プロセスマネージャが子プロセスの数を制御する方法を選択します。
使用可能な値: static
, ondemand
, dynamic
このオプションは必須です。
static
- 子プロセスの数は固定 (pm.max_children
) です。
ondemand
- プロセスを必要に応じて立ち上げます。
dynamic とは対照的に、リクエストされると
pm.start_servers
で指定しただけサービスを開始します。
dynamic
- 子プロセスの数は、
pm.max_children
、pm.start_servers
、
pm.min_spare_servers
、pm.max_spare_servers
の内容に基づいて動的に設定されます。
pm.max_children
int
pm
が static
の場合は作成される子プロセスの数、
pm
が dynamic
の場合は作成される子プロセスの最大数。
このオプションは必須です。
このオプションは、同時に処理できるリクエストの最大数を設定します。 mpm_prefork での ApacheMaxClients ディレクティブや、 オリジナル版の PHP FastCGI における環境変数 PHP_FCGI_CHILDREN と同じです。
pm.start_servers
int
起動時に作成される子プロセスの数。pm
が dynamic
の場合にのみ使います。デフォルト値: min_spare_servers + (max_spare_servers -
min_spare_servers) / 2
pm.min_spare_servers
int
アイドル状態のサーバープロセス数の最小値。
pm
が dynamic
の場合にのみ使います。
また、この場合には必須となります。
pm.max_spare_servers
int
アイドル状態のサーバープロセス数の最大値。
pm
が dynamic
の場合にのみ使います。
また、この場合には必須となります。
pm.max_spawn_rate
int
一度に子プロセスを生成する数。
pm
の値が
dynamic
である場合にのみ使えます。
デフォルト値: 32
pm.process_idle_timeout
mixed
アイドルなプロセスがkillされた後の秒数。
pm
の値が
使用可能な単位: s(秒)(デフォルト)、m(分)、h(時間)、または d(日)。
デフォルト値: 10 秒
pm.max_requests
int
各子プロセスが、再起動するまでに実行するリクエスト数。 サードパーティのライブラリにおけるメモリリークの回避策として便利です。 再起動せずにずっとリクエストを処理させる場合は '0' を指定します。 PHP_FCGI_MAX_REQUESTS と同じです。デフォルト値: 0
pm.status_listen
string
FastCGI の statusリクエスト を受け付けるアドレス。 これを設定すると、独自にリクエストを処理する新しい、 外からは見えないプールが作られます。 これは、長時間実行されるリクエストによって メインプールがビジーである場合に役立ちます。 なぜなら、そうした処理に長時間かかるリクエストが終わる前であっても、 FPM の情報ページ を見ることが出来るからです。 listen ディレクティブと設定できる内容は同じです。 デフォルト値: 未設定。
pm.status_path
string
FPM の情報ページ を見るための URI。この値は、スラッシュ (/) で始めなければいけません。 この値を省略した場合は、どの URI も情報ページとは見なされません。 デフォルト値: なし
ping.path
string
FPM のモニタリングページをコールするための ping URI。この値を省略した場合は、どの URI も ping ページとは見なされません。これを使うと、 FPM が生きていて応答するかどうかを外部から確かめることができます。 この値の最初はスラッシュ (/) で始めなければならないことに注意しましょう。
ping.response
string
このディレクティブを使うと、ping リクエストに対するレスポンスをカスタマイズすることができます。 このレスポンスは text/plain 形式となり、レスポンスコード 200 で返されます。 デフォルト値: pong
process.priority
int
ワーカープロセスに適用される、 nice(2) の値の優先度を指定します。 (指定された場合のみ有効) この値は、-19(優先度最高) から、20(優先度最低) まで変わります。 デフォルト値: 未設定
process.dumpable
bool
プロセスのユーザーやグループが、 masterプロセスのユーザーと異なっていた場合でも、 プロセスのダンプ可能フラグ(PR_SET_DUMPABLE prctl)を設定します。 これにより、プロセスのコアダンプを生成できるようになり、 pool のユーザーがプロセスを ptrace 出来るようになります。 デフォルト値: no PHP 7.0.29, 7.1.17 および 7.2.5 から利用可能
prefix
string
path を評価する際に、 path の前につける prefix を指定します。
request_terminate_timeout
mixed
単一のリクエストを処理する際のタイムアウト。この時間を過ぎるとワーカープロセスが kill されます。 このオプションは、'max_execution_time' ini オプションが何らかの理由でスクリプトの実行を止められなかった場合に使われます。 値 '0' は 'Off' を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0
request_terminate_timeout_track_finished
bool
fastcgi_finish_request がコールされた後や、 アプリケーションが終了し、 内部的なシャットダウン関数がコールされているときには適用されない request_terminate_timeout を有効にするかどうか。 このディレクティブを有効にすると、 そのような適用されないケースでもタイムアウトを無条件に有効にします。 デフォルト値: no。PHP 7.3.0 以降で利用可能。
request_slowlog_timeout
mixed
単一のリクエストを処理する際のタイムアウト。この時間を過ぎると PHP のバックトレースが 'slowlog' ファイルに出力されます。 値 '0' は 'Off' を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0
request_slowlog_trace_depth
int
slowlog に吐き出されるログのスタックトレースの深さ。 デフォルト値: 20。PHP 7.2.0 以降で利用可能。
slowlog
string
遅いリクエストを記録するログファイル。デフォルト値:
#INSTALL_PREFIX#/log/php-fpm.log.slow
rlimit_files
int
このプール内の子プロセス用の、オープン時のファイル記述子の rlimit。デフォルト値: システムで定義されている値
rlimit_core
int
このプール内の子プロセス用の、最大コアサイズの rlimit。 使用可能な値: 'unlimited' あるいは 0 以上の整数値、 デフォルト値: システムで定義されている値
chroot
string
このディレクトリに chroot して開始位置とします。この値は絶対パスで指定しなければなりません。 この値を省略した場合は、chroot を使いません。
chdir
string
このディレクトリに chdir して開始位置とします。この値は絶対パスで指定しなければなりません。 デフォルト値: カレントディレクトリ、あるいは chroot した場合は /
catch_workers_output
bool
ワーカーの標準出力および標準エラー出力を本体のエラーログにリダイレクトします。 省略した場合は、FastCGI の仕様にしたがって標準出力および標準エラー出力を /dev/null にリダイレクトします。 デフォルト値: no
decorate_workers_output
bool
catch_workers_output が有効になった場合に、 ワーカーの出力のデコレートを有効にします。 デフォルト値: yes PHP 7.3.0 以降で利用可能。
clear_env
bool
FPM ワーカー内の環境をクリアする。 任意の環境変数が FPM ワーカープロセスに到達してしまうことを防ぐために、 ワーカー内の環境をいったんクリアしてから、このプールの設定で指定された環境変数を追加します。 デフォルト値: Yes
security.limit_extensions
string
FPM がパース可能なメインスクリプトを拡張子で制限する。 サーバー側の設定ミスによる被害を抑えることができます。 FPM には拡張子 .php だけをパースさせるようにしておけば、 悪意のあるユーザーがその他の拡張子で php のコードを実行させようとする試みを防ぐことができます。 デフォルト値: .php .phar
apparmor_hat
string
AppArmor が有効になっている場合に、 ハット変更を許可します。 デフォルト値: 未設定。
access.log
string
アクセス・ログ・ファイル。 デフォルト値: 未設定
access.format
string
アクセス・ログ形式。
デフォルト値: "%R - %u %t \"%m %r\" %s"
:
プレースホルダ | 説明 |
---|---|
%C
|
%CPU |
%d
|
duration µs |
%e
|
fastcgi env |
%f
|
script |
%l
|
content length |
%m
|
method |
%M
|
memory |
%n
|
pool name |
%o
|
header output |
%p
|
PID |
%q
|
query string |
%Q
|
the glue between %q and %r |
%r
|
request URI |
%R
|
remote IP address |
%s
|
status |
%T
|
time |
%t
|
time |
%u
|
remote user |
追加の環境変数を渡して、特定のプールだけで PHP の設定を更新することができます。 そのためには、次のオプションをプール設定ファイルに追加しなければなりません。
例1 環境変数や PHP の設定をプールに渡す
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/fpm-php.www.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 32M
php_value
や
php_flag
で渡した PHP の設定は、その前に設定されていた内容を上書きします。
ただし
disable_functions や
disable_classes は別で、
php.ini で定義された値を上書きするのではなく、
新たに指定した値を追記することになります。
php_admin_value
や php_admin_flag
で設定した値を ini_set() で上書きすることはできません。
PHP の設定は、ウェブサーバーでも設定できます。
例2 PHP の設定を nginx.conf で行う例
set $php_value "pcre.backtrack_limit=424242"; set $php_value "$php_value \n pcre.recursion_limit=99999"; fastcgi_param PHP_VALUE $php_value; fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/htdocs";
これらの設定は fastcgi ヘッダーとして php-fpm に渡されるので、 一般公開されているアドレスに php-fpm をバインドしてはいけません。 そんなことをすると、誰でもそのサーバーの PHP の設定を変更できることになります。 listen.allowed_clients も参照ください。
注意: プールはセキュリティを考慮した仕組みではありません。 なぜなら、完全な分離を提供しないからです。 たとえば、FPM のプールは、単一の OPcache のインスタンスを使います。