The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Используем Apache 2 и mod_cband для ограничения мирового трафика (limit apache traffic)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: 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.dev/opennews/art.shtml?num=7668 Нижеприведенные настройки ограничат скорость для виртуального хоста в 1024kbps, с возможностью обслуживания не больше 10 запросов в секунду и максимумом в 30 открытых коннектов. Каждый посетитель может установить не больше трех одновременных соединений и получить данные на скорости не выше 20kb/s . Кроме того, виртуальный хост может за 4 недели израсходовать не более 100 Мб трафика, если лимит будет превышен скорость будет ограничена в 128kbps. <VirtualHost 1.2.3.4> ServerName www.example.com ServerAdmin webmaster@example.com 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>

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру