- Arch Linux 2011.08.19 (Linux 3.4.2 i686)
- 带有 SuExec 的 Apache 2.2.22
- PHP 5.4.4 (cli) 通过 FastCGI
我的网站早些时候都运行良好......我不确定它是什么时候发生的,因为我在一个多星期后注意到它(我猜可能是在系统升级之后),但是我所有的 VirtualHosts 都因可怕的“脚本过早结束”而脱机标头:php-fcgid-wrapper” 500 错误。
SuExec 日志为每个站点提供了以下信息:
[2012-07-16 00:45:02]: uid: (1001/site) gid: (1001/site) cmd: php-fcgid-wrapper
[2012-07-16 00:45:02]: command not in docroot (/var/www/site/fcgi-bin/php-fcgid-wrapper)
这不是(或者至少不应该)是真的……我使用set自动编译 Apache--with-suexec-docroot=/srv/www
。尽管如此,我还是尝试了完整性检查,看看 docroot SuExec 实际上认为它有什么:
$ suexec -V
suexec policy violation: see suexec log for more details
日志声称:
[2012-07-16 01:07:52]: too few arguments
也用 sudo 试过;一样。因此,即使这样也没有任何意义,并且使我无法正确诊断问题。
我尝试的另一件事是将所有内容从默认的 docroot 移动/srv/www
到/var/www
,以查看它是否在升级期间恢复为原始存储库版本。更新了我的 VirtealHosts,重新启动了 Apache,但仍然出现相同的 500 错误。
还有什么可能导致这个?
您不需要重新编译它。您可以使用此软件包在 debian 或 ubuntu 上设置自定义路径:
安装包后,有一个专门的目录,可以为每个用户设置suexec路径。应该有一个示例文件供 www-data 用户使用:
如果您没有 Debian 或 Ubuntu,则必须寻找这样的软件包或使用正确的 docroot 重新编译 suexec(请参阅suexec doc)。参数是:
你必须检查,如何为你的发行版做这件事。
使用此命令查找 fcgid 配置:
包装器必须写在目录树中:AP_DOC_ROOT 才能访问和运行。
有一个包含 2 行的 www-data 文件(/etc/apache2/suexec/www-data):
你可以把那行改成你喜欢的
你需要重新编译suexec.c --with-suexec-docroot=/srv/www