用php5-fpm解决chroot问题

时间:2012-06-09 11:41:36

标签: apache variables path php chroot

我正在使用Apache(并且因为客户而无法切换到nginx或lighttpd),而且和其他许多人一样,我遇到以下变量的问题:

$_SERVER["SCRIPT_FILENAME"]
$_SERVER["PATH_TRANSLATED"]
$_SERVER["DOCUMENT_ROOT"]

由于chroot,apache的mod_fastcgi传递给php5-fpm的变量被搞砸了,因此与正确的变量不匹配。
让我举个例子:

$_SERVER["DOCUMENT_ROOT"] = /home/vhosts/h0001/home/domains/test.com
$_SERVER["SCRIPT_FILENAME"] = /home/vhosts/h0001/php-fpm
$_SERVER["PATH_TRANSLATED"] = /home/vhosts/h0001/home/domains/test.com/phpinfo.php

而不是:

$_SERVER["DOCUMENT_ROOT"] = /home/domains/test.com
$_SERVER["SCRIPT_FILENAME"] = /php-fpm
$_SERVER["PATH_TRANSLATED"] = /home/domains/test.com/phpinfo.php

所以,这似乎很容易,因为我只需要从这些变量中删除“/ home / vhosts / hXXXX”。

我想过在php.ini中使用auto_prepend_file指令并添加如下内容:

<?php
    $_SERVER['SCRIPT_FILENAME'] = str_replace('/home/vhosts/h0001','',$_SERVER['SCRIPT_FILENAME'])
    $_SERVER['PATH_TRANSLATED'] = str_replace('/home/vhosts/h0001','',$_SERVER['PATH_TRANSLATED'])
    $_SERVER['DOCUMENT_ROOT'] = str_replace('/home/vhosts/h0001','',$_SERVER['DOCUMENT_ROOT'])

这将允许设置正确的变量,但是我有两个问题:

  • 我不能预先添加任何文件,因为php根本不起作用(“无输入文件。”),因为它在脚本的错误目录中查找
  • 在虚拟主机中设置别名似乎不起作用,因为chroot环境发生在/ home / vhosts / hXXXX上,各种域docroots都在/home/vhosts/hXXXX/home/domains/domain.tld/ ;即使使用别名,Apache仍然会放弃错误的路径。

我见过很多人用nginx处理它,解决问题(允许编辑SCRIPT_FILENAME和DOCUMENT_ROOT,Apache没有),以及其他人解决问题symlinking相应的目录树里面< / em> chroot解决问题。最后一个解决方案真的很糟糕。

另一种方法是使用this patch,但即使尝试它,似乎出现了问题:尝试用 apxs2 -cia mod_fastcgi.c 编译它,抛出一个错误未定义的符号:fcgi_config_new_static_server ,我不知道如何解决这个问题(编译静态?如何用apxs2做?)

关于它的最佳解决方案似乎是手动修补PHP,但我不确定它是最干净的事情......!

0 个答案:

没有答案