尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误
Posted
技术标签:
【中文标题】尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误【英文标题】:500 Internal Servor Error when trying to run a perl cgi file on Apache 2.4.6 Ubuntu 13.10 【发布时间】:2013-12-08 02:22:00 【问题描述】:您好,由于有关此主题的其他帖子对我没有多大帮助(似乎没有一个适用于 Ubuntu 13.10,即我运行的 Ubuntu 版本),所以我决定再写一个。运行这些行之后(*** 成员建议运行这些行)..
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/cgi.load .
sudo ln -s ../mods-available/cgid.load .
sudo service apache2 restart
我将 cgi 文件(它们是 perl 文件)放入了我的 Apache2 的 cgi-bin @/usr/lib/cgi-bin。输入 localhost/cgi-bin/test.cgi 时,我收到 500 内部服务器错误。这是服务器错误日志所说的..
[2013 年 11 月 22 日星期五 21:23:29.045785] [cgi:error] [pid 9559] [client 127.0.0.1:47663] AH01215: (8)Exec 格式错误: exec of '/usr/lib/cgi- bin/test.cgi' 失败 [Fri Nov 22 21:23:29.046720 2013] [cgi:error] [pid 9559] [client 127.0.0.1:47663] 头文件前的脚本输出结束:test.cgi
test.cgi 看起来像这样...
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<HTML;
<html>
<head>
<title>A Simple Perl CGI</title>
</head>
<body>
<h1>A Simple Perl CGI</h1>
<p>Hello World</p>
</body>
HTML
exit;
有没有人知道当这种情况发生时该怎么办或有任何建议?谢谢
编辑:: 奇怪的是,我得到了这个 cgi 文件,我调用 test2.cgi 来运行。
#!/usr/bin/perl
use strict;
use warnings;
sub main
print "Content-type: text/html\n\n";
print "Hello world\n\n";
print "What's your favorite food brah?\n";
main();
但我需要处理的更大、更高级的 cgi 文件无法运行。这些包括在 html 标签中打印出来的东西。
编辑:忽略代码中任何奇怪的间距。这就是我将其复制到帖子中的方式。
【问题讨论】:
不确定,两个 perl 脚本都出现 500 错误。我得到的 apache 错误是,文件不存在:/home/leo/public_html/cgi-bin/sys_cpanel,referer:xxx.xxx.xxx.xxx/~leo/cgi-bin/test1.cgi :( 【参考方案1】:编辑:不清楚每行开头的原始代码中是否有额外的空格导致此问题,如果没有,请忽略其余部分!谢谢阿蒙
如果您尝试从控制台运行它们,它将有助于立即查看任何错误。这种情况下……
Can't find string terminator "HTML" anywhere before EOF
#!/usr/bin/perl # make sure no space before # and this comment is not here
print "Content-type: text/html\n\n";
print <<HTML;
<html>
....
</body>
HTML
exit; # Make sure the HTML line before this has nothing either side of it
基本上,删除 #!/usr/bin/perl 行之前的单个空格,因为 Amon 指出它是否存在,并且结束的 HTML 行也应该修复它(heredoc 终止符周围不应该有任何东西,它的不明显,每行开头都有空格,但有)。
有时在网站上放置示例代码时,可能会引入空格等以提供视觉帮助。我猜这里引入了一些被复制到代码中的东西。很难发现!
【讨论】:
这个“问题”可能只是因为 Markdown 的意图......注意他的 shebang 也是缩进的,这可能会阻止perl
执行该脚本。
再想一想,缩进的shebang实际上可以解释(8)Exec format error
——apache不知道要加载什么解释器。
已对答案稍作修改以尝试突出显示上述内容。
似乎cgi文件带有
是否可以从控制台运行原始脚本并让我们知道是否有任何错误?也许还有,是否有一个 URL 可以放置文件(可能是 zip 文件或其他文件),以便我们下载和检查。以上是关于尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu 13.10 和 apache 2.4.6 上的虚拟主机
Ubuntu Server 上的 Apache 2.4.6:客户端被服务器配置拒绝 (PHP FPM) [加载 PHP 文件时]
Ubuntu Server 上的 Apache 2.4.6:客户端被服务器配置拒绝 (PHP FPM) [加载 PHP 文件时]
Ubuntu Server 上的 Apache 2.4.6:客户端被服务器配置拒绝 (PHP FPM) [加载 PHP 文件时]
Ubuntu Server 上的 Apache 2.4.6:客户端被服务器配置拒绝 (PHP FPM) [加载 PHP 文件时]