FastCGI Process Manager (FPM)
PHP Manual

設定

FPM では、php.ini 形式の構文の設定ファイル php-fpm.conf を使います。

php-fpm.conf のグローバル設定項目

pid string

PID ファイルへのパス。デフォルト値: なし

error_log string

エラーログファイルへのパス。デフォルト値: #INSTALL_PREFIX#/log/php-fpm.log

log_level string

エラーログのレベル。使用可能な値: alert, error, warning, notice, debug、デフォルト値: notice

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

daemonize boolean

FPM をバックグラウンドに送る。'no' にすると デバッグ用に FPM をフォアグラウンドに置き続けます。 デフォルト値: yes

プール一覧の項目

FPM を使うと、複数のプロセスプールをそれぞれ別の設定で実行することができます。 プール単位での設定を行う項目を以下に示します。

listen string

FastCGI リクエストを受け入れるアドレス。 'ip.add.re.ss:port', 'port', '/path/to/unix/socket' 形式の構文が使えます。 このオプションは、各プール単位で必須となります。

listen.backlog int

listen(2) のバックログを設定します。'-1' は無制限を意味します。 デフォルト値: -1

listen.allowed_clients string

接続を許可されている FastCGI クライアントの ipv4 アドレス一覧。オリジナル版 PHP FastCGI (5.2.2+) における環境変数 FCGI_WEB_SERVER_ADDRS と同じです。 tcp でリスンするソケットに対してのみ意味をなします。 書くアドレスはカンマ区切りで指定します。この値を空にしておくと、任意の ip アドレスからの接続を許可します。 デフォルト値: 任意の ip アドレスを許可

listen.owner string

unix ソケットを使う場合に、そのパーミッションを設定します。Linux では、 読み書きアクセス権限を設定しないとウェブサーバーからの接続を受け付けることができません。 多くの BSD 由来のシステムでは、パーミッションにかかわらず接続を受け付けることができます。 デフォルト値: ユーザーとグループは実行しているユーザーと同じ、モードは 0666

listen.group string

listen.owner を参照ください。

listen.mode string

listen.owner を参照ください。

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_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers の内容に基づいて動的に設定されます。

pm.max_children int

pmstatic の場合は作成される子プロセスの数、 pmdynamic の場合は作成される子プロセスの最大数。 このオプションは必須です。

このオプションは、同時に処理できるリクエストの最大数を設定します。 mpm_prefork での ApacheMaxClients ディレクティブや、 オリジナル版の PHP FastCGI における環境変数 PHP_FCGI_CHILDREN と同じです。

pm.start_servers in

起動時に作成される子プロセスの数。pmdynamic の場合にのみ使います。デフォルト値: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

pm.min_spare_servers int

アイドル状態のサーバープロセス数の最小値。 pmdynamic の場合にのみ使います。 また、この場合には必須となります。

pm.max_spare_servers int

アイドル状態のサーバープロセス数の最大値。 pmdynamic の場合にのみ使います。 また、この場合には必須となります。

pm.max_requests int

各子プロセスが、再起動するまでに実行するリクエスト数。 サードパーティのライブラリにおけるメモリリークの回避策として便利です。 再起動せずにずっとリクエストを処理させる場合は '0' を指定します。 PHP_FCGI_MAX_REQUESTS と同じです。デフォルト値: 0

pm.status_path string

FPM の情報ページを見るための URI。この値を省略した場合は、どの URI も情報ページとは見なされません。デフォルト値: なし

ping.path string

FPM のモニタリングページをコールするための ping URI。この値を省略した場合は、どの URI も ping ページとは見なされません。これを使うと、 FPM が生きていて応答するかどうかを外部から確かめることができます。 この値の最初はスラッシュ (/) で始めなければならないことに注意しましょう。

ping.response string

このディレクティブを使うと、ping リクエストに対するレスポンスをカスタマイズすることができます。 このレスポンスは text/plain 形式となり、レスポンスコード 200 で返されます。 デフォルト値: pong

request_terminate_timeout mixed

単一のリクエストを処理する際のタイムアウト。この時間を過ぎるとワーカープロセスが kill されます。 このオプションは、'max_execution_time' ini オプションが何らかの理由でスクリプトの実行を止められなかった場合に使われます。 値 '0' は 'Off' を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0

request_slowlog_timeout mixed

単一のリクエストを処理する際のタイムアウト。この時間を過ぎると PHP のバックトレースが 'slowlog' ファイルに出力されます。 値 '0' は 'Off' を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 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 boolean

ワーカーの標準出力および標準エラー出力を本体のエラーログにリダイレクトします。 省略した場合は、FastCGI の仕様にしたがって標準出力および標準エラー出力を /dev/null にリダイレクトします。 デフォルト値: no

追加の環境変数を渡して、特定のプールだけで PHP の設定を更新することができます。 そのためには、次のオプションを php-fpm.conf に追加しなければなりません。

例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 [email protected]
       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_valuephp_flag で渡した PHP の設定は、その前に設定されていた内容を上書きします。 ただし disable_functionsdisable_classes は別で、 php.ini で定義された値を上書きするのではなく、 新たに指定した値を追記することになります。

php_admin_valuephp_admin_flag で設定した値を ini_set() で上書きすることはできません。

PHP 5.3.3 以降は、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 も参照ください。


FastCGI Process Manager (FPM)
PHP Manual