虛擬主機環境的用途,在於防止因與數個虛擬伺服器共用 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 伺服器 tmp 目錄此時會顯示 Unix 網域通訊端,這些通訊端的名稱由來是處理 PHP 請求的個別虛擬伺服器。對所有使用者使用單一 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 程序,因此會耗用大量的記憶體。