Squid – delay pools
В прокси сервере Squid есть возможность ограничивать скорость, делается это при помощи Delay pools. В версии 2.X этих пулов три класса, а в 3.X добавили еще два новых и их стало пять. Но для начала давайте рассмотрим основные параметры.
И так delay_pools это параметр который задает общее количество наших пулов, то есть если вы собираетесь использовать например три пула, то соответственно вы должны в самом начале написать
delay_pools 3
Далее идет delay_class. Этим параметром мы задаем номер пула и его класс, например мы хотим описать второй пул, который у нас принадлежит к третьему классу:
delay_class 2 3
Необходимо так же задать на какой лист доступа будет распространяться данный пул при помощи delay_access:
delay_access 1 allow users
где users задется при помощи acl, а «1» это номер нашего пула.
И последний параметр, это delay_parameters, в котором мы описываем ограничение:
delay_parameters 1 64000/128000
означает, что мы хотим ограничить наших пользователей первого пула скоростью в 512 кбит = 64 кбайта = 64000 байт, при этом первые 128 кбайт каждого запроса будут скачаны на максимальной скорости, затем, скорость будет ограничена до 512 кбит. Для того что бы убрать ограничение используйте значение -1, пример:
delay_parameters 1 -1/-1
означает, что для пула номер один нет никаких ограничений.
Итак, давайте перейдем к классам
Class 1 -ограничивает общую скорость для всех хостов входящих в определенную группу.
Пример:
delay_pools 1 delay_class 1 1 delay_access 1 allow all delay_parameters 1 64000/128000
тоесть, пул номер один, первого класса, для сети описанной в листе доступа all, ограничивает скорость до 512 кбит/с, при этом первые 128 кбайт будут скачиваться на максимальной скорости, это ограничение общее и действует на всех, у пользователей никаких ограничений нет.
Class 2 — Ограничена общая скорость загрузки и скорость загрузки индивидуального хоста(IPv4 class C)
acl users src 192.168.0.1/24 delay_pools 1 delay_class 1 2 delay_access 1 allow users delay_parameters 1 -1/-1 64000/128000
Пул номер один, второго класса, для сети описанной в листе доступа users.
-1/-1 означает что для сети 192.168.0.1/24 в целом нет ограничений, но есть ограничение 64000/128000 для каждого пользователя.
Class 3 — Ограничена общая скорость загрузки, скорость загрузки подсети и скорость загрузки индивидуального хоста (IPv4 class B).
acl users src 192.168.0.1/23 acl office src 172.16.0.1/24 acl bad_office src 172.16.0.15/32 delay_pools 1 delay_class 1 3 delay_access 1 allow users office !bad_office delay_parameters 1 -1/-1 64000/128000 4000/1000
Пул номер один, третьего класса, для сетей описанных в листе доступа users и office. -1/-1 означает что общая скорость не ограничена, для сетей описанных в листах доступа users и office она ограничена 64000/128000 и каждый IP в данных сетях ограничен 4000/1000. При этом на IP адресс из листа доступа bad_office это правило не распространяеться, так как в параметре delay_access перед ним стоит восклецательный знак
Class 4 — Все то же самое что в Class 3, плюс ограничение для каждого пользователя. Данный пул будет работать только если у вас включен хоть какой-то способ аутентификации (IPv4 class B).
acl users src 192.168.0.1/23 acl auth proxy_auth user1 user2 user3 delay_pools 1 delay_class 1 4 delay_access 1 allow users office !bad_office delay_parameters 1 -1/-1-1/-1 32000/32000 16000/16000
И так, пул номер 1, четвертого класса, для сети 192.168.0.1/23 и пользователей описанных в листе доступа auth. Общего ограничения и на сеть нету, но есть ограничение на IP — 32000/32000 и для пользователей из листа auth 16000/16000. Например если пользователь будет залогинен сразу на нескольких компьютерах, то на всех этих компьютерах его сумарная скорость не привысит 16000/16000, при этом все остальные пользователи из сети 192.168.0.1/23 будут ограничены 32000/32000.
Небольшой пример. Пускай у нас есть офис, в нем есть три пользователя (user1, user2, user3) для которых должно быть ограничение 128 кбит/с, так же один человек (user4) для которого должно быть ограничение 256 кбит/с и босс (boss1), на которого не должно быть ограничения.
Конфигурация будет выглядить так:
acl user_normal proxy_auth user1 user2 user3 acl user_speed proxy_auth user4 acl boss proxy_auth boss1 delay_pools 2 delay_class 1 4 delay_class 2 4 delay_access 1 allow user_normal delay_access 1 deny all delay_access 2 allow user_speed delay_access 2 deny all delay_parameters 1 -1/-1-1/-1 -1/-1 16000/16000 delay_parameters 2 -1/-1-1/-1 -1/-1 32000/32000
Class 5 — Ограничивает скорость для запросов сгрупированных по их тегу, работает на external_acl’s с тагом reply.
И еще один параметр, это delay_initial_bucket_level. С первого взгляда он не совсем понятен, но все очень просто, когда пользователь обращается первый раз к сквиду, после перезапуска или реконфигурации, то сквид проверяет в delay pools этого пользователя, и помещает его в определенную группу(воронку) ограничения, например 16000/16000, так вот, параметр delay_initial_bucket_level отвечает за первичную заполненность этих групп. Если вы не изменяете этот параметр, то изначально он равен 50%. Как пример, если поставить значение 100%, то все возможные клиенты из листа доступа к которому применим наш delay pool будут внесены во все группы, это ускорит их первый запрос к серверу, но при этом сервер должен хранить всю, возможно лишнюю, информацию в памяти, это может быть лишним расточительством ресурсов. 50% достаточно оптимальное значений.
Что бы пользоваться delay pools, необходимо скомпелировать Squid с параметром —enable-delay-pools.