NGINX で PHP-FPM プールを別々に設定する方法
出版された: 2025年2月15日 11:52:35 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ディレクティブで定義されている、リッスンするソケットまたはアドレスを変更する必要があります。デフォルトでは、PHP-FPM は Unix ソケットを使用するため、 listenディレクティブはおそらく次のようになります。
任意の有効な名前に変更できますが、ここでも、構成ファイル名に似た名前を使用することをお勧めします。たとえば、次のように設定します。
それでは、ファイルを保存してテキスト エディターを終了します。
パート2 – NGINX仮想ホスト構成の更新
ここで、新しいプールに変更する、つまり新しいソケットに接続する FastCGI 構成を含む NGINX 仮想ホスト ファイルを開く必要があります。
Ubuntu 14.04 では、これらはデフォルトで /etc/nginx/sites-available に保存されますが、他の場所に定義することもできます。仮想ホストの設定がどこにあるかは、おそらくあなたが一番よく知っているでしょう ;-)
好みのテキスト エディターで関連する設定ファイルを開き、PHP-FPM ソケットを定義するfastcgi_passディレクティブ (場所のコンテキスト内にある必要があります) を探します。この値は、手順 1 で作成した新しい PHP-FPM プール設定と一致するように変更する必要があります。したがって、この例を続けると、次のように変更します。
fastcgi_pass unix:/var/run/php5-fpm-mypool.sock;
次に、そのファイルも保存して閉じます。これでほぼ完了です。
パート3 – PHP-FPMとNGINXを再起動する
行った設定変更を適用するには、PHP-FPM と NGINX の両方を再起動します。 restartではなくreloadで十分な場合もありますが、変更した設定によっては、うまくいかないこともあります。特定のケースでは、古い PHP-FPM 子プロセスをすぐに終了させたかったので、PHP-FPM を再起動する必要がありましたが、NGINX の場合は reload で十分な場合があります。自分で試してみてください。
sudo service nginx restart
これで完了です。すべてを正しく実行した場合、変更した仮想ホストは新しい PHP-FPM プールを使用し、他の仮想ホストと子プロセスを共有しなくなります。