В прокси сервере 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.
По поводу Class 5, тяжело что-то сказать, но в ближайшее время, я постараюсь дополнить примерами этот раздел.
И еще один параметр, это delay_initial_bucket_level. С первого взгляда он не совсем понятен, но все очень просто, когда пользователь обращаеться первый раз к сквиду, после перезапуска или реконфигурации, то сквид проверяет в delay pools этого пользователя, и помещает его в определенную группу(воронку) ограничения, например 16000/16000, так вот, параметр delay_initial_bucket_level отвечает за первичную заполненость этих групп. Если вы не изменяете этот параметр, то изначально он равен 50%. Как пример, если поставить значение 100%, то все возможные клиенты из листа доступа к которому приминим наш delay pool будут внесены во все группы, это ускорит их первый запрос к серверу, но при этом сервер должен хранить всю, возможно лишнюю, информацию в памяти, это может быть лишним расточительством ресурсов. 50% достаточно оптимальное значений.
В завершении лишь скажу, что для того, что бы пользоваться delay pools, вам необходимо скомпелировать Squid с параметром --enable-delay-pools
Коментувати