有很多关于如何使用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
的替代方案。
答案 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的行为。