Проблемы с fastcgi

Andrey Chernomyrdin andrey.ngnix-ru at sats.spb.ru
Wed Dec 28 14:07:21 MSK 2005


День добрый,

Вот тут столкнулся с какими-то неясными проблемами в fastcgi.
Пытаюсь мигрировать с lighttpd на ngnix, соответственно собираем nginx 
0.3.18 и имеем установленный lighttpd 1.4.8
Есть куски конфигов:
nginx:
    ...
    server {
        listen 80;
        charset off;
        location / {
            fastcgi_pass 127.0.0.1:8801;
            fastcgi_index /;

            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param PATH_TRANSLATED $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
        }
    }
    ...
Есть lighttpd.conf:
...
fastcgi.server = ( "/" => ( (
        "host"        => "127.0.0.1",
        "port"        => 8801,
        "check-local"    => "disable",
        "docroot"    => "/"
    ) )
)
...

Есть два скрипта, один использует стандартный CGI::Fast, и не 
наблюдается ни каких проблем:
use strict;
use CGI::Fast;

my $COUNTER = 0;
while( my $cgi = CGI::Fast->new ) {
    my $content = join( '',
        $cgi->start_html(
            -title    => "Fast CGI Rocks",
            -encoding=> 'windows-1251',
        ),
        $cgi->h1("Fast CGI Rocks"), "Invocation number ", 
$cgi->b($COUNTER++), " PID ", $cgi->b($$),".",
        $cgi->hr,"\n",
        $cgi->end_html,
        "\n",
    );
    print
        $cgi->header(
            -charset    => 'windows-1251',
            -content_type    => 'text/html',
            -content_length => length( $content )
        ),
        $content;
}

Есть то-же самое, но использующее POE:
use strict;

use lib qw(.);
use HTTP::Request;
use HTTP::Response;
use POE::Component::FastCGI;

$| = 1;
my $COUNTER = 0;
            POE::Component::FastCGI->new(
                Address        => '127.0.0.1',
                Port        => 8801,
                Handlers    => [
                    [ '/' => \&default ],
                    [ '' => \&default ],
                ],
            );
POE::Kernel->run();
print "\nAll done\n";
exit 0;

sub default {
    my (    $request )    = @_;
    my    $response    = $request->make_response;
    my    $content    = join( "\n",
            qq{<!DOCTYPE html\n\tPUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN"\n\t 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">},
            qq{<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" 
xml:lang="en-US">},
            qq{<head>},
            qq{<title>Fast CGI Rocks</title>},
            qq{<meta http-equiv="Content-Type" content="text/html; 
charset=windows-1251" />},
            qq{</head>},
            qq{<body>},
            qq{<h1>Fast CGI Rocks</h1>Invocation number <b>$COUNTER</b> 
PID <b>$$</b>.<hr />},
            '',
            qq{</body>},
            qq{</html>},
            ''
        );

    print STDERR "Accept request accept\n";
    $response->header(
        "Content-type"        => "text/html; charset=windows-1251",
        "Content-Length"    => length( $content ),
    );
    $response->content( $content );
    $response->send;
    $COUNTER++;
    print STDERR "Response sent\n";
}

Из под lighttpd все нормально, а вот в случае nginx приходит запрос, 
скрипт выдает ответ, но на строну клиента ничего не выводится... Хотя 
если убить скрипт - то выводится то, что должно вывестись. То есть 
какая-то проблема с буферизацией.

Может быть кто-нибудь сталкивлася с подобной проблемой ?

P.S.
На всякий случай прилагаю все скрипты и трафик снятый tcpdump-ом в 
случае с nginx и lighttpd в виде tar.gz.
По tcpdump-логам:
 lighttpd.dat - Это нормальная сессия по fastcgi протоколу между 
скриптом и lighttpd
 nginx.dat - Сессия между скриптом и nginx причем запись прекращена 
спустя 5 секунд после запроса
 nginx2.dat - то же самое, но после запроса ~ 10 сек скрипту был послан 
сигнал SIGINT (^C)

Система debian unstable.


-- 
Andrey Chernomyrdin

-------------- next part --------------
A non-text attachment was scrubbed...
Name: fastcgi.tar.gz
Type: application/gzip
Size: 9604 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20051228/70816c41/attachment.bin>


More information about the nginx-ru mailing list