ПРОЕКТЫ 


  АРХИВ 


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]

Re: Проблема с X-Accel-Redirect



On Sat, Sep 12, 2009 at 06:12:40PM -0500, Alex Solovey wrote:

> Имеется следующая конфигурация:
> - nginx 0.8.14 в качестве proxy-сервера
> - сервер приложений apache+mod_perl
> - Linux 2.6.28-15-generic (Ubuntu 9.04)
> 
> Сервер приложений для некоторых запросов отдает файлы посредством
> X-Accel-Redirect. До первого такого запроса все работает нормально. Но
> как только встретился первый X-Accel-Redirect, для последующих запросов
> nginx вместо полученного от сервера приложений ответа отсылает случайным
> образом любой из предыдущих ответов. Иногда вместо нормального ответа
> приходит мусор, состоящий из склееных вместе нескольких предыдущих ответов.
> Пример:
>     http://x.y.z/app/foo  --> ok
>     http://x.y.z/app/bar  --> ok
>     http://x.y.z/app/file --> ok (здесь используем X-Accel-Redirect)
>     http://x.y.z/app/bar  --> отдает file
>     http://x.y.z/app/foo  --> отдает file
>     http://x.y.z/app/bar  --> отдает foo
>     http://x.y.z/app/file --> отдает мусор
>         ... ждем время, достаточное для закрытия keep-alive ....
>     http://x.y.z/app/foo  --> ok
>     http://x.y.z/app/bar  --> ok
>     http://x.y.z/app/foo  --> ok
>     http://x.y.z/app/file --> ok (здесь используем X-Accel-Redirect)
>     http://x.y.z/app/foo  --> отдает мусор
> 
> Это продолжается до закрытия keep-alive соединения. После чего всё опять
> работает нормально дл первого запроса с X-Accel-Redirect. Если
> установить keepalive_timeout 0, то проблема не возникает.
> 
> Опытным путем удалось выяснить, что проблема появилась в nginx-0.8.11;
> версии 0.7.61 и 0.8.10 работают нормально.

Прилагаемый патч должен исправить эту ошибку.


-- 
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_upstream.c
===================================================================
--- src/http/ngx_http_upstream.c        (revision 2439)
+++ src/http/ngx_http_upstream.c        (working copy)
@@ -1815,6 +1815,7 @@
         r->valid_unparsed_uri = 0;
 
         ngx_http_internal_redirect(r, uri, &args);
+        ngx_http_finalize_request(r, NGX_DONE);
         return NGX_DONE;
     }
 


 




Copyright © Lexa Software, 1996-2009.