Ключевые слова:limit, apache, traffic, (найти похожие документы)
From: Alexander Sheiko
Date: Mon, 9 Jun 2006 14:31:37 +0000 (UTC)
Subject: Используем Apache 2 и mod_cband для ограничения мирового трафика
Оригинал: http://adsh.ukrweb.net/blog/article/31
Сформулируем задачу. Пусть у нас есть хостинг, с неограниченным
украинским трафиком и ограниченным мировым. Необходимо ограничить
мировой трафик для каждого виртуального хоста до заданной величины.
Заходим на домашнюю страницу mod_cband и скачиваем дистрибутив.
Для FreeBSD он есть в портах - /usr/ports/www/mod_cband.
Создаём каталог с правами на запись для веб сервера:
mkdir /usr/local/etc/apache2/Cband
chgrp www /usr/local/etc/apache2/Cband
chmod 664 /usr/local/etc/apache2/Cband
Вносим необходимые изменениея в httpd.conf:
...
ServerRoot /usr/local
LoadModule cband_module libexec/apache2/mod_cband.so
...
<IfModule mod_cband.c>
CBandDefaultExceededURL http://hosting.ua/bandwidth_exceeded.html
<CBandClass ua>
Include etc/apache2/cband-ua.conf
</CBandClass>
<CBandClass world>
CBandClassDst 0/0
</CBandClass>
<CBandUser hosting>
CBandUserClassLimit world 1Gi
CBandUserScoreboard etc/apache2/Cband/hosting.ua_scoreboard
CBandUserPeriodSlice 1H
CBandUserPeriod 1D
</CBandUser>
</IfModule>
...
<VirtualHost customer.hosting.ua:80>
...
<IfModule mod_cband.c>
CBandClassLimit world 100Mi
CBandUser hosting
CBandScoreboard etc/apache2/Cband/customer.hosting.ua_scoreboard
CBandPeriodSlice 1H
CBandPeriod 1D
</IfModule>
...
</VirtualHost>
...
Пояснения:
CBandDefaultExceededURL - страница, на которую будут редиректится
запросы к хосту (серверу), выработавшему заданную квоту.
cband-ua.conf - файл, в который в нужном формате будут помещаться
списки украинских сетей.
CBandUser hosting - пользователь "hosting" к которому мы привяжем
лимит суммарного мирового трафика с сервера в 1GB -
"CBandUserClassLimit world 1Gi"
CBandClassLimit world 100Mi - зададим лимит мирового трафика для
конкретного виртуального хоста в 100 MB в сутки "CBandPeriod 1D".
(CBandUser|CBand)PeriodSlice 1H - сделаем так, чтобы нельзя было сразу
выкачать весь суточный лимит, как для всего трафика с сервера, так и
для отдельного виртуального хоста. При этом - лимит трафика для
текущего часа получается делением суммарного оставшегося суточного
трафика на оставшееся количество часов до истечения суток. Таким
образом, неиспользованный трафик за предыдущие часы не теряется -
очень рулёзный и принципиальный момент.
Мы преднамеренно задали лимиты как для сервера, так и для виртуальных
хостов. Дело в том, что реальный трафик для сервера обычно намного
меньше суммы лимитов для всех виртуальных хостов. Ограничения для
всего сервера заданы для случая, когда нам необходимо избежать
превышения некоторого лимита, заданного нам провайдером, в случае
внезапного возрастания активности большинства сайтов. В других случаях
общий лимит можно не задавать.
На остальных настройках я останавливаться не буду - они хорошо описаны
в официальной документации. Хочу лишь отметить, что дискретность
подсчёта трафика можно задавать и в неделях и в месяцах - кому как
удобнее.
Теперь о том, как скармливать серверу список украинских хостов. Для
этого пишем следующий скрипт:
#!/bin/sh
PATH=/sbin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
SRC=http://noc.ix.net.ua/ua-list.txt
NEW=`mktemp -t apache`
DIFF=`mktemp -t apache`
CONF=/usr/local/etc/apache2/cband-ua.conf
SHOW_MSG="YES"
if [ ! -z "${SHOW_MSG}" ];then
echo
echo 'Reload Apache UA Networks list:'
fi
echo 'CBandClassDst 10.0.0.0/8' > ${NEW}
echo 'CBandClassDst 192.168.0.0/16' >> ${NEW}
fetch -d -o - -q ${SRC} | egrep "^[0-9]" | \
awk -F'/' '{if($2){print $0}else{print $1"/24"}}' | sort | \
sed "s/^/CBandClassDst /" >> ${NEW}
diff -uBb ${CONF} ${NEW} | egrep '^[+-]CBandClassDst [0-9]' \
> ${DIFF}
if [ -s ${DIFF} ]; then
cp -f ${NEW} ${CONF}
chmod 644 ${CONF}
if [ ! -z "${SHOW_MSG}" ];then
echo
echo 'Apache Reconfigure:'
cat ${DIFF}
fi
apachectl graceful
fi
rm -f ${NEW} ${DIFF}
В список украинских сетей добавлены сетки 10.0.0.0/8 и 192.168.0.0/16
- это может быть полезно для приравнивания локального трафика к
украинскому.
Если закомментировать переменную "SHOW_MSG" - скрипт можно запускать
из крона, при отсутствии ошибок в работе он не будет выводить ни каких
сообщений.
При разработке скрипта использованы идеи товарища Bestia за что
ему отдельное спасибо.
From: http://www.opennet.me/opennews/art.shtml?num=7668
Нижеприведенные настройки ограничат скорость для виртуального
хоста в 1024kbps, с возможностью обслуживания не больше 10 запросов в
секунду и максимумом в 30 открытых коннектов. Каждый посетитель может
установить не больше трех одновременных соединений и получить данные на
скорости не выше 20kb/s . Кроме того, виртуальный хост может за 4 недели
израсходовать не более 100 Мб трафика, если лимит будет превышен
скорость будет ограничена в 128kbps.
<VirtualHost 1.2.3.4>
ServerName www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www
CBandLimit 100M
CBandExceededSpeed 128 5 15
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 3
CBandScoreboard /var/www/scoreboard
CBandPeriod 4W
</VirtualHost>