NGINX で PHP-FPM プールを別々に設定する方法
出版された: 2025年2月15日 11:52:35 UTC
最終更新日 2026年1月12日 8:29:59 UTC
この記事では、複数の PHP-FPM プールを実行し、FastCGI 経由で NGINX をそれらに接続して、仮想ホスト間のプロセス分離と分離を可能にするために必要な構成手順について説明します。
How to Set Up Separate PHP-FPM Pools in NGINX
この投稿の情報は、Ubuntu Server 14.04 x64 上で動作する NGINX 1.4.6 と PHP-FPM 5.5.9 に基づいています。他のバージョンでは有効かどうかは不明です。(追記:Ubuntu Server 24.04、PHP-FPM 8.3、NGINX 1.24.0 の時点でも、この投稿のすべての手順が動作することを確認済みです)
すべてを同じプールで実行するのではなく、複数のPHP-FPM子プロセスプールを設定することには、多くの利点があります。セキュリティ、分離/独立性、そしてリソース管理などが主な利点として挙げられます。
あなたの動機が何であれ、この投稿はあなたを助けるでしょう :-)
パート1 – 新しいPHP-FPMプールを設定する
まず、PHP-FPMがプール設定を保存しているディレクトリを見つける必要があります。Ubuntu 14.04では、デフォルトでは/etc/php5/fpm/pool.dです。おそらく、そこにwww.confというファイルが既に存在し、デフォルトプールの設定が保存されているはずです。もしこのファイルをまだ確認していない場合は、デフォルト設定はかなり低性能なサーバー向けになっているため、設定に合わせて調整する必要があるかもしれません。しかし、今は最初からやり直す必要がないように、このファイルのコピーを作成しておくだけで大丈夫です。
もちろん、「mypool」を、プールに付けたい名前に置き換えてください。
新しいファイルをnanoなどのお好みのテキストエディタで開き、目的に合わせて調整してください。子プロセスの数や、プールを実行するユーザーとグループも調整する必要があるでしょう。ただし、プールの名前とリッスンするソケットの2つの設定は絶対に変更する必要があります。変更しないと、既存のプールと競合し、動作しなくなります。
プール名はファイルの先頭近くにあり、角括弧で囲まれています。デフォルトでは[www]です。この名前は任意の名前に変更してください。設定ファイルと同じ名前にすることをお勧めします。この例では[mypool]に変更してください。変更しないと、PHP-FPMはその名前の最初の設定ファイルしか読み込まないため、動作が不安定になる可能性があります。
次に、listenするソケットまたはアドレスを変更する必要があります。これはlistenディレクティブで定義されます。PHP-FPMはデフォルトでUnixソケットを使用するため、listenディレクティブはおそらく次のようになります。
任意の有効な名前に変更できますが、ここでも、構成ファイル名に似た名前を使用することをお勧めします。たとえば、次のように設定します。
それでは、ファイルを保存してテキスト エディターを終了します。
パート2 – NGINX仮想ホスト構成の更新
ここで、新しいプールに変更する、つまり新しいソケットに接続する FastCGI 構成で NGINX 仮想ホスト ファイルを開く必要があります。
Ubuntu 14.04では、デフォルトでは/etc/nginx/sites-available以下に保存されますが、他の場所に定義することも可能です。仮想ホストの設定がどこに保存されているかは、ご自身でよくご存知だと思います ;-)
お好みのテキストエディタで関連する設定ファイルを開き、PHP-FPMソケットを定義する fastcgi_pass ディレクティブ(location コンテキストで指定する必要があります)を探します。この値を、手順1で作成した新しいPHP-FPMプール設定と一致するように変更する必要があります。つまり、この例では次のように変更します。
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
その後、そのファイルも保存して閉じます。これでほぼ完了です。
パート3 – PHP-FPMとNGINXを再起動する
設定変更を適用するには、PHP-FPMとNGINXの両方を再起動してください。再起動ではなくリロードだけで十分な場合もありますが、変更した設定によっては、うまくいかない場合が多いようです。今回のケースでは、古いPHP-FPMの子プロセスをすぐに終了させたかったので、PHP-FPMの再起動が必要でしたが、NGINXの場合はリロードだけで十分かもしれません。ぜひご自身で試してみてください。
sudo service nginx restart
これで完了です。すべてが正しく行われていれば、変更した仮想ホストは新しいPHP-FPMプールを使用し、他の仮想ホストと子プロセスを共有しなくなります。
