Веб-сервис Perl с nginx и FastCGI - не умеет читать параметры - PullRequest
3 голосов
/ 26 августа 2011

Существует множество учебных пособий по использованию оболочек FastCGI для CGI для обслуживания кода Perl с использованием nginx.Но мне комфортно работать с модулями 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 Ответ

1 голос
/ 27 августа 2011

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.

...