我遇到了一个问题,当以用户“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 正常工作,但该评论已有两年历史,可能已得到解决。