ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

nginx незавершаетсоединениепослевыдачиответачерезinternal_redirect()?


  • To: nginx-ru@xxxxxxxxx
  • Subject: nginx незавершаетсоединениепослевыдачиответачерезinternal_redirect()?
  • From: Igor Afanasyev <afan@xxxxxxx>
  • Date: Tue, 8 Sep 2009 09:49:50 +0000 (UTC)

Всем добрый день!

Столкнулся со следующей проблемой, которая выглядит как явный баг nginx.

Конфигурация:
CentOS,
nginx/0.8.14 c perl-модулем
perl 5.8.8

Есть простейший Perl-модуль, который настроен на обработку URL определенного 
типа:

=[foo.pm]==============================
package foo;

use nginx;

sub handler {
  my $r = shift;
  $r->internal_redirect('/foo.shtml');
  return OK;
}

1; # return true
=[/foo.pm]=============================

Упрощенный site.conf (выписал те директивы, которые имеют отношение к делу):

=[site.conf]===========================
perl_modules /path/to/my/lib
perl_require foo.pm

location ~* \.xml$ {
  perl foo::handler;
}

location ~* \.shtml$ {
  expires -1;
  ssi on;
  root /var/www/html;
}

=[/site.conf]==========================

Когда делаю "wget -S http://localhost/foo.shtml";, все нормально, файл отдается.

Когда делаю "wget -S http://localhost/bar.xml";, nginx отдает заголовки и само 
тело файла foo.shtml (условно, 500 байт -- это wget показывает), но потом 
соединение не закрывается и wget ждет окончания посылки файла бесконечно (до 
таймаута wget). При этом в заголовках не прописан размер файла foo.shtml.

В error_log (который у меня включен в режиме debug) видна такая картина:

=[error_log]===========================
2009/09/08 05:09:59 [notice] 29032#0: *1 "^/(.*)\.shtml$" matches "/foo.shtml", 
client: XX.XX.XX.XX, server: XXXXXX.com, request: "GET /bar.xml HTTP/1.1", 
host: 
"XXXXXX.com:81"
=[/error_log]==========================

Т.е. internal_redirect() срабатывает, правило location срабатывает. в 
access_log 
при этом записи никакой не появляется (пока клиент не отвалится по таймауту).

Пробовал отключать gzip, ssi и прочее -- проблема не исчезает. Даже не знаю, 
куда копать. Есть смысл ставить nginx 0.7.61?





 




Copyright © Lexa Software, 1996-2009.