Re[2]: upstream

anon linux-kernel at mail.ru
Mon Apr 21 15:32:29 MSD 2008


вот мой body_filter_module
...
b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
        for(cl = in ; cl ; )
        {
                size = cl->buf->last - cl->buf->pos;
                el = ngx_array_push_n(r->news, size);
                memcpy(el, cl->buf->pos, size);//я копирую себе содержимое тело ответа
                //cl->buf->pos = cl->buf->last;если не делать эти строчки ответ от бекенда перестает ситаться
                //cl->buf->last = cl->buf->start;
                if (cl->buf->last_buf)
                {
                        *((char *)ngx_array_push(r->news)) = '\0';
                        //printf("news=%s\nend\n", (char *)r->news->elts);
//а тут я хочу создвть свою цепочку полжить в нее буфер и обработанные данные и выдать клиенту
//как правильно вызвать следующий фильтр с моей цепочкой
                        //return ngx_http_next_body_filter(r, in);
                }
                cl = cl->next;
        }
как правильно обновить цепочки чтобы от апстрима, чтобы продолжали приходит данные и я их накапливал у себя в памяти чтобы потом отправить после некоторой модификации
конкретно затык происходит в ngx_http_upstream.c:3553 в ngx_chain_update_chains что то с цепочками не так обрабатывается,
если я из своего фильтр модуля не вызываю ngx_http_next_body_filter(r, in), то при обновлениии цепочек получаю free - NULL busy - not NULL out - NULL
а должно быть(когда сразу из модуля вызываю http_next_body_filter(r, in)
free - not NULL busy - not NULL out - NULL
какой код нада возвращать из моего фильтра, если я не отправляю цепочки следующему фильтру а просто у себя данные собираю.

Подскажите, куда копатью
Спасибо.

-----Original Message-----
From: Sergey Bochenkov <bachan at j3qq4.org>
To: nginx-ru at sysoev.ru
Date: Mon, 21 Apr 2008 14:00:29 +0400
Subject: Re: upstream

> 
> А в чем проблема? Как пробовали?
> В рассылке по main_filter_need_in_memory и NGX_AGAIN искали?
> 
> Архив рассылки есть на gmane.org.
> 
> > как организовать такую штуку: получать ответ от апстрима - сохранить его весь в памяти обработать и потом послать пользователю.
> > Пробую серез фильтр модуль - не могу разобраться как цепочки обрабатывать а потом отослать все
> > Подскажите
> > 
> > 
> > 
> 
> 
> 





More information about the nginx-ru mailing list