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
|