在 Debian Squeeze Apache 2.4.10 + mod_proxy_fcgi + php-fpm 上的 VirtualHost 中设置 php_value?

在 Debian Squeeze Apache 2.4.10 + mod_proxy_fcgi + php-fpm 上的 VirtualHost 中设置 php_value?

将我们的服务器更新到 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 创建一个唯一的池,但这让我担心,原因有二:

  1. 设置的复杂性——目前,配置非常简单
  2. 从套接字切换到 TCP?我说的对吗?每个池都需要一个唯一的 TCP 端口?我是否也需要每个池一个唯一的套接字?
  3. 内存分配!这台服务器没有我想要的那么多 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

参考:https://bugs.php.net/bug.php?id=51595

答案2

最后,我只是在 /etc/php5/fpm/php.ini 配置中定义了一些 [HOST=] 部分。

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

这比使用 mod_env 或 .user.ini 更安全。

相关内容