trac:“内部服务器错误(500)”,带有 mod_fcgid 和 mod_suexec

trac:“内部服务器错误(500)”,带有 mod_fcgid 和 mod_suexec

我尝试在具有 shell 访问的共享服务器上设置 Trac,SW 是 Trac 1.0.1、Python 2.6.6、带有 mod_fcgid 和 mod_suexec 的 Apache 2.2.15。

我按照主机提供商 wiki 上的说明进行了设置,https://uberspace.de/dokuwiki/cool:trac。唯一的区别是我的 TRAC_ENV 目录位于子目录中,而不是直接位于我的主目录中(即 ~/path/to/trac,而不是 ~/trac)。(并且我在 DocRoot 中将 trac.fcgi 重命名为 foo-trac.fcgi,如下所示。但我也尝试将其重命名回 trac.fcgi。)

正如那里所写的,我已经将 trac.fcgi(也尝试使用 trac.cgi)从 TRAC_ENV/deploy/cgi-bin/ 复制到 $DocRoot/foo/foo-trac.fcgi 并添加

Options +ExecCGI
AddHandler fcgid-script .fcgi   # also tried "AddHandler cgi-script .cgi"
RewriteEngine On
RewriteBase /foo
RewriteRule ^$ foo-trac.fcgi  [L]   # also tried foo-trac.cgi
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) foo-trac.fcgi/$1  [QSA,L]  # also tried foo-trac.cgi

到 $DocRoot/foo/.htaccess。

TRAC_ENV 在 foo-trac.f?cgi 中正确设置(绝对路径以 / 开头),

但目前,我只收到“500 内部服务器错误”,并且在我的错误日志中我收到

(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
Premature end of script headers: foo-trac.fcgi

(与 fcgi)

suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: foo-trac.cgi

(带有 cgi)。

所有的 .f?cgi 文件、它们的目录、.egg_cache 目录 (我已经对它进行了 mkdir 操作,但它并不存在并且不是由 trac (或 python) 本身创建的) 以及日志目录都是模式 0755。日志文件是 0644 (我已在尝试中触碰过它们)。

(好吧,Apache 日志目录和文件的所有者(和组也是)是 root。但是我当然不会尝试自己在那里写任何日志,TRAC_ENV/log/ 和 ~/log/ 是我的,我也尝试分别设置模式 777(目录)和 666(trac.log)——没有帮助,所以我再次将模式反转为 755/644。)

我也已经尝试/检查了来自的提示http://encodable.com/internal_server_error/和 /suexec_problems/ 在那里,但没有任何作用或帮助。

任何提示在哪里搜索问题(似乎是 suexec,但也许是重写规则;但是/和),如何发现它?或者也许有人直接有解决方案?:)

问候,

潘讷

答案1

嗯,我找到答案了。

我必须道歉:这是暗示之一http://encodable.com/internal_server_error/尽管——而且我一直天真地相信,行尾一定是正确的(Unix 风格,不是Windows 喜欢 CR/LF 结尾),因为我只使用 Linux。

而且我没有想到我会从 trac 项目中得到损坏的文件...但是事实确实如此,感谢我的主机托管商 uberspace.de 的支持,他们找到了它。:)

因此,一个简单的方法dos2unix trag.fcgi解决了这个问题 - 但在整个 TRAC_ENV 目录和库中(在我的情况下在 ~/lib/python2.6/)有很多 CRLF 结尾的文件,所以我推荐类似

for file in $( find $TRAC_ENV $LIB_DIR -type f | xargs file | grep -i text | grep CRLF | cut -d\: -f1 ); 
do 
   dos2unix $file
done

你又会开心起来!;)

相关内容