虚拟主机环境旨在防范与多个虚拟服务器共享 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 进程。