web-dev-qa-db-ja.com

Apache + PHP-FPMの多くのWebサイトに1つのプールを用意する必要がありますか?

軽いWebトラフィックで実行されている小さなWebサイト(約300)が多数ある場合、それらはすべて同じプールを使用する必要がありますか、それともそれぞれに個別のプールを使用する方がよいでしょうか?

Webサイトが信頼されており、プールに個別のユーザー/グループを配置することの利点(アクセス/許可のより良い制御など)はここでは考慮されていないと仮定します。

2
bobo

通常、私はWebサイトごとに1つのプールを使用することを好みます(ただし、ここではないかもしれませんが、すべて読んでください)。

その主な理由は、Webサイトごとのphp設定を許可することです。また、これらの設定はWebサイトのニーズに基づいて変化する可能性がありますが、Webサイトのリソースをより適切に分離するためにも異なります。たとえば、変更された一時ディレクトリまたはopen_basedir_settingsの場合:

(...)
env[TMP] = /path/to/client/var/tmp
env[TMPDIR] = /path/to/client/var/tmp
env[TEMP] = /path/to/client/var/tmp
env[DOCUMENT_ROOT] = /path/to/client/www
php_admin_value[open_basedir] = ".:/path/to/client/www:/path/to/client/var/tmp:/path/to/client/var/log"
php_admin_value[upload_tmp_dir]="/path/to/client/var/tmp"
(...)

Php-fpmにchrootモードを使用することもできますが、それはもっと複雑です。そしてこの場合、chrootされたプールを使用すると、すべてのクライアントに1つのプールのみを使用する方が簡単な場合があります(したがって、共有chrootは、実際にはあまり良くありません)。これは、apcのようなものがすべてのプールで共有されるためです。つまり、複数のchrootされたプールを使用すると、異なるプールに同じパスを持つ複数のファイルが作成される可能性があり、apcはファイルのキャッシュバージョンを1つだけ保存します。実際、apc + chrootの場合、最良の解決策は、インスタンスごとに1つのプールを使用して、複数のphp-fpmインスタンスを実行することです。 300のWebサイトにとって簡単なことではありません。

次に、プールpm.[static/dynamic]設定を使用して、各Webサイトで使用できるphpプロセスの数を管理できます。 300の小さなWebサイトの場合これは問題になる可能性があります、これらのWebサイトの多くがアクティブでない場合、メモリの大部分は何もしないプールプロセスによって使用されることに注意してください。

あなたの場合、トラフィックは少なく、ウェブサイトは軽いので、300を超える(少なくとも)プールのプロセスをボックスで実行し、何もしないことは過剰です。そして、あなたの特定のケースでは、代わりに少数のプールを使用し(おそらく、いくつかのWebサイトをアプリケーションごと、バージョンごと、ニーズごとにグループ化できます)、各プールで複数のWebサイトを実行できるようにします。または、1つだけの場合は、Webサイトのグループを使用して、open_basedirの制限を適用しようとしますが、それらがすべて実際に同じである場合は、1つのプールのみで実行できます。

1
regilero