Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Igor Sysoev <is-G97k7egY2jIKNkxEY4oc4w <at> public.gmane.org>
Subject: Re: =?KOI8-R?Q?=F0=D2=CF=C2=CC=C5=CD=D9_=D3_fastcgi?=
Newsgroups: gmane.comp.web.nginx.russian
Date: Wednesday 28th December 2005 11:48:13 UTC (over 12 years ago)
On Wed, 28 Dec 2005, Andrey Chernomyrdin wrote:

> Вот тут столкнулся с какими-то неясными
проблемами в 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{ Transitional//EN"\n\t 
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">},
>           qq{http://www.w3.org/1999/xhtml"
lang="en-US" 
> xml:lang="en-US">},
>           qq{},
>           qq{Fast CGI Rocks},
>           qq{},
>           qq{},
>           qq{},
>           qq{

Fast CGI Rocks

Invocation number $COUNTER PID > $$.
}, > '', > qq{}, > qq{}, > '' > ); > > 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. nginx буферизирует вывод FastCGI. Насколько я понимаю, FastCGI в данном случае не закрывает соединение и поэтому клиенту ничего не передаётся. Аналога "proxy_buffering off" для FastCGI пока нет. Игорь Сысоев http://sysoev.ru
 
CD: 3ms