ПРОЕКТЫ 


  АРХИВ 


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: платная доработка nginx



"Igor Sysoev" <is@xxxxxxxxxxxxx> wrote:

> On Wed, Jan 28, 2009 at 10:56:51AM +0000, Valery Kholodkov wrote:
> > Думаю, что нужно завести фазу приема тела запроса, а вместо функции
> ngx_http_output_filter завести функцию, которая помещает переданные ей
> буферы в очередь в ngx_http_request_t и отдает NGX_OK.
> 
> ngx_http_output_filter() только в случае статики передаёт файловый
> буфер
> однократно. В случае прокси/fastcgi ngx_http_output_filter()
> вызывается
> по мере получения данных от бэкенда.

Проблема не в том, что ngx_http_output_filter() в случае статики передаёт 
файловый буфер однократно, а в том, что SSI-фильтр срабатывает до получения 
тела. Именно поэтому мне в моем патче пришлось перекроить весь static-модуль.

> > Фаза приема тела запроса выполнит либо
> ngx_http_read_client_request_body, либо ngx_http_discard_request_body
> в зависимости от флага, и в случае ngx_http_read_client_request_body
> отдаст код 
> > 
> > {
> >     ngx_http_finalize_request(r, ngx_http_output_filter(r,
> r->queue));
> > }
> > 
> > в качестве post_handler. В таком случае все модули на content-фазе
> подвергнуться минимальным изменениям.
> 
> В смысле - фаза приёма тела вызывается после контентной ?

Да.

> А как быть с телом для проксирования и прочая ?

Возможны варианты:

1) Простой: на content-фазе определять, какая фаза будет следующей. Если у 
запроса есть content_handler (который, возможно, унаследовался от локейшена), 
то считать, что content_handler сам принял тело и переходить к log-фазе. Если 
нет, то переходить к фазе обработки тела;
2) Генерализованый: сделать код возрата NGX_PROCESS_BODY и в случае получения 
его от любого рода хэндлеров на content-фазе переходить к обработке тела, а 
хэндлер тела записать в запрос.

> Но даже, если вызывать после контента - неизвестно, что в теле -
> есть SSI или нет.

Это всё равно невозможно определить без чтения содержимого файла. Проще 
передать управление этим администратору.

-- 
Regards,
Valery Kholodkov


 




Copyright © Lexa Software, 1996-2009.