ПРОЕКТЫ 


  АРХИВ 


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: Ограничение на число одновременных соединений , но с постановкой лишних в очередь



Dmitry Koterov wrote:

Что касается backlog на стороне сокета, то видите ли, какая штука... ограничение нужно не per-socket, а per-HTTP_HOST (грубо говоря).

Т.е. на одном IP висит много виртуальных хостов, и на каждый должно идти, скажем, не больше 5 одновременных коннектов (а на весь сокет - ограничения нет). Можно, конечно, каждый хост на свой внутренний IP повесить, но хочется чего-то более универсального.

насколько мне известно, средствами только nginx
такое ограничение в данный момент сделать нельзя.

это было бы полезно для справедливого распределения
мощностей backend`а между всеми виртуальными хостами
(Apache MPM prefork и небольшое количество MaxClients)

выделить каждому виртуальному хосту отдельный listening socket
на backend`е - это не поможет, потому что backend сначала делает
accept(), а только потом узнает имя виртуального хоста, на который
пришел этот запрос. поэтому надо будет делать каждому виртуальному
хосту выделенный apache, или - делать ограничение средствами nginx.

интересную идею видел в mod_slotlimit, там ограничения включаются
не сразу, а только при достижении определенного уровня нагрузки
на backend, параметр AvailableSlotsPercent - "Percentage of slots available in order to set any restrictions". как и маршрутизаторы
включают правила Traffic shaping только при 100% загрузке канала.

Требуется ограничить именно число коннектов к backend-ам, так,
чтобы входящие соединения вставали в очередь, если все backend-ы
заняты.

Как известно, директива limit_conn позволяет ограничивать
одновременной число соединений к той или иной зоне. Однако, когда это число превышается, nginx выдает 503.

Есть ли в nginx какое-то средство, которое бы позволило ставить
"лишние" запросы в очередь, а не давать им отлуп? Например,
я хочу, чтобы на backend шло одновременно не более 5 соединений, а все остальные ставились nginx-ом в очередь.

--
Best regards,
 Gena




 




Copyright © Lexa Software, 1996-2009.