web-dev-qa-db-ja.com

php-fpmは、単一のユーザープールを持つ複数の仮想ホストに対して動的に設定されたopen_basedirをサポートできますか?

Php-fpmをユーザー「nobody」として実行すると(レガシーの理由で)、php-fpmのnginx(およびApache)でopen_basedirを動的に設定しようとすると、他のvhostに「ブリードスルー」するという問題が発生しています。

を使用して

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/mike/htdocs";

そして

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/adam/htdocs";

各仮想ホストに適切な場合など(php 5.3.20)

phpinfoは正しいopen_basedirが設定されていることを示していますが、最終的に(かなり迅速に)仮想ホストの1つが間違ったopen_basedirに遭遇し、「mike」のプログラムを実行しようとしましたが、「adam」のopen_basedirがあり、エラーがスローされ始めました。 。

Fastcgi_paramは基本的にphp-fpmの環境を設定しているだけなので、同じワーカーがphpファイルを処理している間に環境が変更されると思います。

どういうわけか、fastcgi phpプロセス(nobodyとして実行)も使用するlitespeedのようなサーバーはこれを正しく行い、仮想ホスト間で「ブリード」することなく外部で設定できるopen_basedirで正しく動作します。

したがって、「誰も」として実行し続け、vhost間の環境を維持するために使用できるトリックまたは回避策があるかどうか疑問に思っています。

私はtcp/ipではなくunixソケットを使用していることに注意する必要がありますが、それが違いを生むとは思いません。

3
ck_

私はここで同じ問題の言及を見つけました:

http://forum.nginx.org/read.php?3,234856

彼らは、5.3以降に利用可能になったphp.iniの新しい[Host = xyz.xyz]ディレクティブを使用して回避できたと述べました。

Php.netのマニュアルには、これがphp-fpmで正しく機能しないことを警告するコメントが示されていますが、そのコメントは2年前のものであり、解決されている可能性があります。

http://php.net/manual/en/ini.sections.php#101689

2
ck_