我们有一台运行 Centos 5.11、Apache 2.2 和默认 perl 的服务器。通过 suexec 运行脚本“很好”,但我已经安装了 perlbrew,这样我就可以安装大量额外的模块而不会干扰它。
我创建了一个简单的 perl 脚本来测试:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "perl: ". $^X . "\n";
当通过 apache+suexec 运行时,它按预期输出:
Hello, world! perl: /usr/bin/perl
但是,当我将 shebang 线更改为:
#!/root/perl5/perlbrew/perls/perl-5.22.1/bin/perl
并以同样的方式运行,我得到一个内部服务器错误,并且 apache 错误日志显示:
suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: test.cgi
但在命令行运行很好:
# ./test.cgi
Content-type: text/html
Hello, world!
perl: /root/perl5/perlbrew/perls/perl-5.22.1/bin/perl
我已经尝试了各种各样的事情。我确实想知道这是否是“PATH”问题,但 apache 文档说“在 2.2 上,无法使用 Setenv 设置 PATH 环境变量。”
suexec 错误通常似乎是由 dos/unix 编码引起的——但这不是问题。
可能是我安装 perlbrew 的方式有问题吗?它应该作为不同的用户(作为 apache)吗?不同的位置(在 /var/www 下)?
欢迎任何其他建议!