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