在OSX Lion Apache服务器上设置mod_perl

时间:2012-06-11 20:26:55

标签: perl apache cgi mod-perl

我是perl和apache服务器的新手。我正在尝试为CGI脚本获取基本的Hello World。这是我的hello world CGI文件的代码:

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<H1>Hello World</H1>\n";

当我在命令行上执行CGI脚本./hello.cgi时,它可以工作,但是当我在浏览器中打开hello.cgi时,它只显示cgi文件的文本。

当我查看/ var / log / apache2 / error_log中的error_log时,我可以看到mod_perl正在运行:

Apache/2.2.21 (Unix) DAV/2 mod_perl/2.0.5 Perl/v5.12.3 configured -- resuming normal operations

但是当我运行以下perl程序时,似乎我没有“MOD_PERL”env变量:

if (exists $ENV{"MOD_PERL"}) {
   print "YAY!\n";
 }
else{
    print"mod_perl is not working\n";
 }

顺便说一句,我的hello.cgi文件和上面的perl脚本位于/ Users / myusername / Sites /

有人可以帮我正确配置mod_perl,以便在浏览器中正确查看hello.cgi吗?我一直在阅读mod_perl文档和搜索论坛很多很多小时都无济于事。提前致谢

@SebastianStumpf我得到了你的第一个例子,但是我似乎仍然无法获得一个mod_perl脚本。我一直在阅读文档,但我无法弄明白。顺便说一下,谢谢你的帮助。我很感激

更新:我相信我的工作正常!谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

如果您使用的是Mac OS X Lion 的Apache / Perl,并且不需要mod_perl ,那么您不必配置任何内容。只需在/Library/WebServer/CGI-Executables中使用.cgi扩展名创建文件,然后通过sudo chmod 755 file.cgi调整权限。该脚本将通过CGI(而不是mod_perl)执行。我试过这个并且它工作得很好:

$ sudo -s
# cat - > /Library/WebServer/CGI-Executables/test.cgi
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw/:standard/;
use Data::Dumper;
print header, start_html, h1('works'), end_html;
^D

# sudo chmod 755 /Library/WebServer/CGI-Executables/test.cgi
# exit

测试它:

$ curl -i http://localhost/cgi-bin/test.cgi
HTTP/1.1 200 OK
Date: Mon, 11 Jun 2012 22:29:24 GMT
Server: Apache/2.2.21 (Unix) DAV/2
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>works</h1>
</body>
</html>

如果您需要mod_perl,请查看文档。 <{3}}应该是让mod_perl运行所需的全部内容。

修改

我已将以下行添加到/etc/apache2/httpd.conf,重新启动了Web服务器并且mod_perl正常工作:

LoadModule perl_module libexec/apache2/mod_perl.so
Alias /perl /Library/WebServer/perl
<Location /perl>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    Options ExecCGI
    PerlSendHeader On
    Order allow,deny
    Allow from all
</Location>

如果脚本保存在/Library/WebServer/perl/中,您可以看到所有mod_perl标头现在都可用,但我宁愿设置Apache / mod_perl的私有安装。 configuration part of the introduction让这更容易......