将我们的服务器更新到 Debian Jessie (8.3) 后,我将 Apache 2.4.10 从 mpm_worker/mod_php 切换到 mpm_event/proxy_fcgi/php-fpm。我已为所有虚拟主机配置了切换,如下所示:
# cat conf-enabled/php5-fpm.conf
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
</FilesMatch>
我还禁用了 mod_php。因此,apache 不允许我在 VirtualHosts 文件中拥有 php_admin_value/php_value/php_flag 指令。
Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration
我读过一些关于 .user.ini 文件的内容,但听起来我需要设置的指令不受支持,而且出于性能原因,我刚刚成功从我的网站中删除了所有 .htaccess 文件,所以这似乎是一种向后(且不兼容)的方法。
另一个常见的建议是为每个 VirtualHost 创建一个唯一的池,但这让我担心,原因有二:
- 设置的复杂性——目前,配置非常简单
- 从套接字切换到 TCP?我说的对吗?每个池都需要一个唯一的 TCP 端口?我是否也需要每个池一个唯一的套接字?
- 内存分配!这台服务器没有我想要的那么多 RAM。为服务器上访问量较少的网站启动一堆 php-fpm 实例似乎很浪费。
答案1
您可以从 Apache 配置文件将环境变量传递给 CGI 池:
SetEnv PHP_ADMIN_VALUE "open_basedir=/path-to-your-doc-root"
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
</FilesMatch>
mod_env
必须启用,并且.htaccess
如果第三方用户可以上传或修改它们,则必须禁用文件处理AllowOverride None
( )。如果需要传递多个变量,则必须用换行符将它们连接起来(\n
)。
恶意用户只需一个简单的即可更改open_basedir
或其他重要的 PHP 配置变量(即:)。我不知道是否有可能阻止这种行为。disable_functions
.htaccess
答案2
最后,我只是在 /etc/php5/fpm/php.ini 配置中定义了一些 [HOST=] 部分。
http://php.net/manual/en/ini.sections.php
这比使用 mod_env 或 .user.ini 更安全。