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

关于如何使用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; } 

问题是,无论我调用脚本多less次, param返回自启动程序以来第一次被调用的值。 有没有更好的方法来做到这一点? 我也愿意替代CGI.pm

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的行为。