使用nginx和FastCGI的Perl Web服务 - 无法读取参数

时间:2011-08-26 14:37:14

标签: perl nginx cgi fastcgi

有很多关于如何使用FastCGI到CGI包装器来使用nginx来提供Perl代码的教程。但我很自在地使用Perl模块,所以我不需要包装器。我正试图找出正确的方法来设置它。这是我到目前为止的代码:

#!perl

use CGI;
use FCGI;

my $s = FCGI::OpenSocket(':9000',20);
my $r = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR,
    \%ENV, $s);
while ($r->Accept >= 0) {
    my $cgi = CGI->new;
    print "Content-type: text/html\n\n";
    print "<html><body>The foo input is ", $cgi->param('foo'), "</body></html>";
    $r->Finish;
}

并在nginx中启用它,如下所示:

location /foo {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.pl;
}

问题在于,无论我调用脚本多少次,param都会返回自启动程序后第一次调用时传递的相同值。有没有更好的方法呢?我也愿意接受CGI.pm的替代方案。

1 个答案:

答案 0 :(得分:1)

CGI::Fast将为您处理大部分工作,包括设置守护程序。

use CGI::Fast;

local $ENV{FCGI_SOCKET_PATH} = ":9000";
local $ENV{FCGI_LISTEN_QUEUE} = 20;

while ($q = CGI::Fast->new) {
    print $q->header;
    print "<html><body>The foo input is ", $cgi->param('foo'), "</body></html>";
}

替代方案是Nginx::Simple,它可以让您更好地控制cgi-script-as-daemon的行为。