Welcome! Log In Create A New Profile

Advanced

Re: Проблема: upstream buffer is too small

Maxim Dounin
September 27, 2010 10:02AM
Hello!

On Mon, Sep 27, 2010 at 04:56:33PM +0400, Илья Винокуров wrote:

> > Либо я не понял что вы хотите, либо непонятно, где вы тут видите противоречие.
> >
> > Есть какой-то server, в нём есть location с proxy_pass и proxy_cache.
> >
> > curl дёргает урл, nginx лезет на бекенд, забирает ответ, ответ попал в кеш.
> > Теперь второй бекенд (точно так же как curl) дёргает этот же урл,
> > nginx отдаёт ответ из кеша.
> >
>
> Текущая схема:
>
> Запрос
> |
> v
> nginx
> |
> v
> backend -----------------> service
>
>
> Запрос приходит на nginx, mod_perl овый backend идет за контентом к service.
> Если service тормозит, то на backend'е выстраиваются толпы апачей и всем плохо.
>
> Но дело в том, что nginx знает с какими параметрами backend будет вызывать service
> И вызов service можно сделать из nginx. А бекенд возьмет данные из кеша nginx'а
>
> Запрос
> |
> v
> nginx -----------------> service
> | ^
> | |
> v |
> backend
>
> В этом случае при торможении service бекенду плохо не будет -
> все "зависшие" соединения останутся на nginx, который
> справляется со множеством соединений гораздо лучше апача...
>
> Схема словами:
>
> 1) Приходит запрос на nginx.
> 2) Nginx знает из запроса с какими параметрами должен сходить
> backend к service.
> 3) Nginx прокачивает свой кэш нужным запросом
> 4) Nginx передает запрос backend'у
> 5) Backend идет за контентом не к service, а к nginx в его кэш.
> 6) Если в кэше не оказалось данных от service, схема вырождается
> в первую и фатальных ошибок не происходит.
>
> Вот, что мне хочется.
>
> Надеюсь, я смог донести Вам свою мысль.

Без сторонних модулей должна сработать какая-то такая схема с
двойным проксированием:

<!--#include virtual="/precache/..." wait="yes" -->

location /precache/ {
proxy_pass http://localhost/realcache/;
proxy_method HEAD;
proxy_pass_request_body off;
proxy_pass_request_headers off;
}

location /realcache/ {
proxy_pass ...service...;
proxy_cache ...
}

Детали:

- В подзапросе из ssi метод при проксировании ставится в HEAD,
чтобы тела ответа с той стороны не присылали.

- При втором проксировании с proxy_cache кеш сам поменяет запрос
на GET и закеширует результат.

Как вариант - опять же с двойным проксированием, но проксировать
на сервис, и при втором проксировании добавлять X-Accel-Redirect
на реальный бекенд. Это наверное несколько прямее чем

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Re[6]: Проблема: upstream buffer is too small

Илья Винокуров September 27, 2010 08:58AM

Re: Проблема: upstream buffer is too small

Olexander Shtepa September 27, 2010 09:08AM

Re: Re[6]: Проблема: upstream buffer is too small

Alexander Petrovsky September 27, 2010 09:08AM

Re: Re[6]: Проблема: upstream buffer is too small

Sergey Shepelev September 27, 2010 09:32AM

Re: Проблема: upstream buffer is too small

Maxim Dounin September 27, 2010 10:02AM

Re[2]: Проблема: upstream buffer is too small

Илья Винокуров September 28, 2010 04:36AM

Re: Проблема: upstream buffer is too small

Maxim Dounin September 28, 2010 08:56AM

Re[2]: Проблема: upstream buffer is too small

Илья Винокуров September 29, 2010 02:58AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 188
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready