php-fpm 是否可以支持为具有单个用户池的多个虚拟主机动态设置 open_basedir?

php-fpm 是否可以支持为具有单个用户池的多个虚拟主机动态设置 open_basedir?

我遇到了一个问题,当以用户“nobody”身份运行 php-fpm 时,尝试在 nginx(和 apache)下为 php-fpm 动态设置 open_basedir 会“渗透”到其他 vhost(由于遗留原因)。

使用

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/mike/htdocs";

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/adam/htdocs";

等等,适用于每个虚拟主机(php 5.3.20)

phpinfo 显示设置了正确的 open_basedir,但最终(相当快)我开始得到错误,其中一个虚拟主机将运行到错误的 open_basedir,试图为“mike”执行一个程序,但 open_basedir 却是“adam”的。

由于 fastcgi_param 只是基本上为 php-fpm 设置环境,我认为正在发生的事情是同一个工作者在仍在处理 php 文件时它的环境会发生变化。

不知何故,像 litespeed 这样也使用 fastcgi php 进程(以 nobody 身份运行)的服务器可以正确完成此操作并正常工作,并且能够在外部设置 open_basedir 而不会在虚拟主机之间“流失”。

所以我想知道是否有一个技巧或解决方法可以用来继续以“无人”身份运行并保留虚拟主机之间的环境。

我应该注意我使用的是 unix 套接字而不是 tcp/ip,但我认为这没有什么区别。

答案1

我在这里发现了对同一问题的提及:

http://forum.nginx.org/read.php?3,234856

他们说他们能够使用 php.ini 5.3 之后提供的新的 [host=xyz.xyz] 指令来解决这个问题

php.net 手册显示了一条评论警告,这不能与 php-fpm 正常工作,但该评论已有两年历史,可能已得到解决。

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

相关内容