Ограничение на число одновременных соединений, но с постановкой лишних в очередь

Gena Makhomed gmm at csdoc.com
Sat Nov 21 16:07:29 MSK 2009


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






More information about the nginx-ru mailing list