仮想ホスティング環境は、複数の仮想サーバー間で PHP エンジンを共有することに伴う、潜在的なセキュリティーおよびパフォーマンスの問題を回避することを主眼にしています。
Web Server 7.0 環境変数を使用して、各仮想サーバーに別個のエンジンがバインドされた同一の PHP バイナリを割り当てることができます。各仮想サーバーが独自の php.ini ファイルを保持していることを確認してください。
Service fn=responder-fastcgi app-path="/path/to/php/php_fcgi" bind-path="$(lc($urlhost))" req-retry=5 type="*magnus-internal/fastcgi*" app-env="PHPRC=/path/to/users/$(lc($urlhost))/config" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" min-procs=1 restart-interval=10 bucket="php-bucket" rlimit_cpu=60 |
これで、Web Server tmp ディレクトリは、PHP 要求を処理する個別の仮想サーバーにちなんで名付けられた Unix ドメインソケットを表示します。これは、すべてのユーザーに対して単一の PHP FastCGI バイナリを使用することで可能になります。このため、単一のバイナリが、それを使ってコンパイルされた必須プラグインをすべて処理するはずです。上記の問題を解決するために、必要に応じて各ユーザーが PHP バイナリの独自コピーを保持していることを確認してください。
Service fn=responder-fastcgi app-path="/path/to/users/$(lc($urlhost))/php_fcgi" bind-path="$(lc($urlhost))" req-retry=5 type="*magnus-internal/fastcgi*" app-env="PHPRC=/path/to/users/$(lc($urlhost))/config" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" min-procs=1 restart-interval=10 bucket="php-bucket" rlimit_cpu=60 |
URI 空間の構造を制御することにより、アプリケーションごとに異なる PHP バイナリを使用することも可能です。
次に例を示します。
URI 空間の構造が次のようになっている場合を例に挙げます。
/app/foo.php
ここで、/app はアプリケーション全体の名前であり、常に PHP ファイルで終わる URI 構造内の最初のディレクトリです。
<If uri~=^/(\w+)/\w+\.php$> Service fn=responder-fastcgi app-path="/path/to/users/$(lc($urlhost))/$1/php_fcgi" bind-path="$(lc($urlhost))_$1" req-retry=5 type=+magnus-internal/fastcgi*" app-env="PHPRC=/path/to/users/$(lc($urlhost))/config" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" min-procs=1 restart-interval=10 bucket="php-bucket" rlimit_cpu=60 </If> |
これにより、明確に構築された PHP FastCGI バイナリが呼び出され、一意の名前を付けられた Unix ドメインソケットにバインドされます。このため、別の PHP アプリケーションや別の仮想サーバーと干渉することはありません。ただし、このプロセスに伴って多数の PHP プロセスが実行されるため、大量のメモリーが消費されます。