Re: BugReport: ./configure --add-module неправильно подключает filter модуль

Denis Erygin erygin at corp.mail.ru
Thu Jun 7 22:12:44 MSD 2007


>А как там может возникнуть зацикливание ?

Я имею ввиду то, что если в ngx_http_*_body_filter()
вызвать ngx_http_subrequest, то сервер войдет в цикл,
который прервется в конце концов core дампом (проверено).

В ngx_http_ssi_body_filter же используется специальная обработка,
предупреждающая повторный вызов ngx_http_subrequest в результате
работы предыдущего ngx_http_subrequest, которая мне не совсем понятна.

>Контекст выставляется для каждого подзапроса. Вся обработка ssi хранится
>в контексте.
Т.е. не могу создать в контексте счетчик вызовов ngx_http_*_body_filter() /ngx_http_subrequest,
т.к. сам контекст целиком постоянно обновляется?

Я бы хотел реализовать логику паттерна singleton для вызова ngx_http_subrequest из
ngx_http_*_body_filter(), для этого нужен счетчик этих вызовов, чтобы отличить основной
вызов ngx_http_*_body_filter() от пришедшего ответа к ngx_http_subrequest
(который также вызовет ngx_http_*_body_filter() ) - вот собственно и все.
Конечно, можно завести глобальную переменную, но ngx_http_ssi_filter_module
такой подход не использует, вот и возникает вопрос, что там происходит.

Пусть будет общий для всего модуля ngx_http_*_body_filter,
нужно отличить контекст его вызова для обычного запроса от ответа к ngx_http_subrequest,
разбор исходников пока четкого ответа не дал.

----- Original Message ----- 
From: "Igor Sysoev" <is at rambler-co.ru>
To: <nginx-ru at sysoev.ru>
Sent: Thursday, June 07, 2007 7:57 PM
Subject: Re: BugReport: ./configure --add-module неправильно подключает filter модуль


On Thu, Jun 07, 2007 at 06:30:07PM +0400, Denis Erygin wrote:

> Какой механизм используется для блокирования зацикливания
> по ngx_http_subrequest в ngx_http_ssi_filter_module?

А как там может возникнуть зацикливание ?

> Насколько я понял, эмулируется сессия с помощью:
> ngx_http_get_module_ctx ( r, ngx_http_ssi_filter_module );
> ngx_http_set_ctx ( r, ctx, ngx_http_ssi_filter_module );
>
> Но я столкнулся с тем, что первый параметр "r" (ngx_http_request_t)
> в ngx_http_ssi_body_filter меняется после вызова ngx_http_subrequest,
> и ngx_http_get_module_ctx возвращает NULL, даже если заранее
> инициализировать через ngx_http_set_ctx  в ngx_http_ssi_header_filter.
>
> Как это работает в ngx_http_ssi_filter_module?

Контекст выставляется для каждого подзапроса. Вся обработка ssi хранится
в контексте.


-- 
Игорь Сысоев
http://sysoev.ru






More information about the nginx-ru mailing list