在apache中将cgi部署到psgi转换的应用程序

时间:2015-02-04 12:03:12

标签: perl web cgi psgi

#!C:/perl/bin/perl.exe
use CGI;

my $q = CGI->new;
print $q->header('text/plain'),
    "Hello ", $q->param('name');

#CONVERTED PSGI PAGE

#!C:/perl/bin/perl.exe
use CGI::PSGI;

my $app = sub {
    my $env = shift;
    my $q = CGI::PSGI->new($env);


    return [ 
        $q->psgi_header('text/plain'),
        [ "Hello ", $q->param('name') ],
    ];
};

我在apache服务器上运行这个cgi.pl   http://localhost/cgi-bin/cgi.pl

但我无法在apache服务器中运行转换后的psgi.pl 它的显示 请帮忙 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请通过admin@example.com与服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。服务器错误日志中可能提供了有关此错误的更多信息。

1 个答案:

答案 0 :(得分:0)

CGI和PSGI是Web服务器和外部程序如何通信的两种不同规范。

在CGI下,Web服务器期望从程序接收文本输出,包括HTTP响应标头,空白行和程序呈现的HTML。

CGI模块为apache服务器实现了这个逻辑,如果程序的输出不符合,apache会报告500错误。

在PSGI下,Web服务器期望程序返回一个三元素列表,其中包含HTTP响应代码,HTTP响应头和程序呈现的HTML。

所以你可以看到符合PSGI规范的程序会混淆mod_cgi。

所以你需要安装一个实现PSGI的apache模块,或者使用一个Perl模块(CGI :: PSGI docs建议CGI::Emulate::PSGI)来接受你的PSGI列表并转换为CGI。