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

Илья Винокуров ilvin на mail.ru
Пн Сен 27 16:56:33 MSD 2010


> Либо я не понял что вы хотите, либо непонятно, где вы тут видите противоречие.
> 
> Есть какой-то 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, схема вырождается в первую и фатальных ошибок не происходит.

Вот, что мне хочется.

Надеюсь, я смог донести Вам свою мысль.

С почтением,
  Илья Винокуров.




Подробная информация о списке рассылки nginx-ru