Apache 1.x 버전에서는 아래와 같이 mod_throttle 모듈과 mod_bandwidth 모듈을 통해 트래픽 제어를 할 수 있었다.
Apache + Throttle(mod_throttle) 을 이용해서 트래픽정보를 구합니다.
[Throttle Status]
http://자신의도메인/throttle-me
실시간으로 볼 수 있으며 자신의 일일 트래픽량이 증가시 웹서버에서 Throttle 연동해 있기 때문에 초과시 자동적으
로 트래픽량 초과 안내 페이지가 나오면 일일 트래픽량으로 제한이므로 하루가 지나면 다시 초기화로 다시 계산해서
그 정보가 계산됩니다.
% - 허용된 트래픽에서 몇퍼센트를 사용
Hits - 도메인의 히트수
Refused - 트래픽이 초과하였을때 접속하여 요청거부된 횟수
KBytes Sents - 회원님의 도메인 트래픽량
KBytes Per Hits - 한 히트당 트래픽량의 평균치
Polocy - Volume 트래픽 제한을 양으로 계산
Limits - 트래픽 제한양 제한선 입니다.
Period - 1d 하루 24시간을 기준으로 트래픽을 계산한다는 뜻입니다.
Period Elapsed - 24시간중 소요된 시간
Idle time - 최종 히트후 요청 대기시간
참조 사이트 : http://www.snert.com/Software/mod_throttle/
##############
## 설치하기 ##
##############
일반적으로 아파치에서 mod_throttle 을 연동하기 위해서는 2가지 방식의 컴파일을 지원하지만 여기서는
DSO 방식으로 설치하도록 한다.
---------------------------------------------------------------------
STATIC 방식 (APACHE mod_throttle 부분)
./configure --disable-shared=throttle
--add-module=/usr/local/mod_throttle-3.1/mod_throttle.c
---------------------------------------------------------------------
DSO 방식
cd /usr/local/mod_throttle-3.1
make install
mod_throttle.so를 apache디렉토리 libexec안에 복사해줍니다.
그런후 httpd.conf에 mod_throttle부분을 수정.
(compile시 apxs에 위치를 Makefile안에 전체경로로 변경후 make하세요.)
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
---------------------------------------------------------------------
아파치에서 mod_throttle 을 설치하기 위한 순서
1. 다운로드
2. 컴파일 / 설치
3. apache 설정파일 내부에서의 mod_throttle 부분을 인식
4. 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
5. 트래픽확인
■ 다운로드
[root@www download]# wget http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
[root@www download]# tar xzf mod_throttle312.tgz
[root@www download]# cd mod_throttle-3.1.2/
[root@www mod_throttle-3.1.2]# ll
total 188
-rw-r--r-- 1 111 users 7233 Dec 3 2000 CHANGES.txt
drwxr-xr-x 2 111 users 4096 Dec 2 2000 Img
-rw-r--r-- 1 111 users 1525 Dec 2 2000 LICENSE.txt
-rw-r--r-- 1 111 users 1009 Dec 2 2000 Makefile
-rw-r--r-- 1 111 users 26492 Dec 3 2000 index.shtml
-rw-r--r-- 1 111 users 97711 Dec 3 2000 mod_throttle.c
-rw-r--r-- 1 111 users 277 Dec 2 2000 patch.proxy_util.c
-rw-r--r-- 1 111 users 4 Dec 3 2000 version3.cnt
■ 컴파일 / 설치
[root@www mod_throttle-3.1.2]# make install
apxs -c mod_throttle.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -fpic -DSHARED_MODULE -
I/usr/local/apache2/include -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o
apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache2/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache2/libexec/mod_throttle.so
chmod 755 /usr/local/apache2/libexec/mod_throttle.so
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
cp /usr/local/apache2/conf/httpd.conf.new /usr/local/apache2/conf/httpd.conf
rm /usr/local/apache2/conf/httpd.conf.new
root@www mod_throttle-3.1.2]# apachectl restart
■ apache 설정파일 내부에서의 mod_throttle 부분을 인식
<IfModule mod_throttle.c>
# 트래픽이 초과되면 나오는 에러페이지
ErrorDocument 503 http://192.168.1.1/error/error.html
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
Deny from all
# 다른접근을 모두 거부하고 특정 아이피에서만 throttle-status 를 확인 하도록 설정
# 여기서는 192.168.1.1 과 192.168.1.2 의 IP 주소만 접근할 수 있다.
Allow from 192.168.1.1
Allow from 192.168.1.2
</Location>
<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me
</Location>
</IfModule>
■ 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
트래픽을 걸때의 여러가지 방법이 존재한다.
ThrottlePolicy Volume 100M 1d //하루 100M
ThrottlePolicy Request 1000 1d //하루 천번
ThrottleClientIP 1100 volume 2 10 //로그 1100k
<VirtualHost 192.168.1.1>
ServerName test1.com
DocumentRoot /home/test1/pubic_html
# 전송량 1일 300M
ThrottlePolicy Volume 300M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test2.com
DocumentRoot /home/test2/public_html
ServerName test2.com
# 전송량 1일 400M
ThrottlePolicy Volume 400M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test3.org
DocumentRoot /home/test3/public_html
ServerName test3.org
# 전송량 1일 500M
ThrottlePolicy Volume 500M 1d
</VirtualHost>
■ 트래픽확인
1. 첫번째방법은 자신의 트래픽만 보는 방법 ( 일반 사용자인 경우 )
http://자신의도메인/throttle-me
2. 두번째방법은 모든 가상호스트를 보는 방법 ( 관리자인 경우 )
( ※ 중요!!! 이때는 아무나 접근할 수 없도록 접근 IP 막는 조치를 취해야 한다. 그렇지 않으면 모든 사용자의
정보를 다른 사용자가 볼 수도 있고 트래픽을 초기화 할 수도 있다. )
http://자신의도메인/throttle-status
하지만, Apache2로 넘어오면서 mod_throttle 모듈이나 mod_bandwidth 모듈을 더 이상 사용할 수 없게 된다.
대신 mod_cband 모듈이라는 걸출한 녀석을 사용할 수 있다. mod_cband 모듈을 통해 트래픽 제한과 대역폭 제한, 그리고 트래픽 제한 결과 등을 웹을 통해 확인할 수 있게 된다.
Debian에서는 libapache2-mod-cband 패키지가 있으므로, 소스 컴파일할 필요 없이 패키지를 설치하면 된다. 현재 libapache2-mod-cband 패키지의 mod_cband 모듈 버전은 0.9.7.4 이다.
만약 최신 버전을 설치하고 싶다면, 소스 파일을 구해 컴파일하면 된다.
출처: http://linux.tini4u.net
os: centos4.6
아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.
1. mod_cband 설치 (최신버전: http://cband.linux.pl/)
http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/
[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# make install 수행 시에 아래와 같은 오류가 발생하는 경우,
#make
...
write "make install" to install module
#make install
...
2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.
3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.
※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.
4. cband 단위
- 전송속도 단위
- 트래픽 제한 단위
- 시간 단위
5. cband 지시자
6. 통계화면 보기
관리자모드 - http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml
7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
mod_cband(아파치2의 트래픽 제어모듈 like mod_throttle&mod_bandwidth)
0. 내가 원한는 것?
예전에 apache 1은 mod_throttle으 로 가상호스트별 트래픽 측정 및 제한이 가능했습니다.
이 트래픽 제한 기능은 호스팅을 하기위해서는 필수입니다. 어떤 도메인에서 많이 사용하는지
아는 것은 아주 중요한 일이기 때문입니다. 하지만,
apache2를 쓰면 이놈을 포기할 수 밖에 없었습니다. 검색하다 .. cband를 찾았습니다.
mod_throttle과 기능및 구조 거의 흡사하며, mod_bandwidth의 기능까지 포함했고,
최근에 개발되어 계속 성능 향상이 되어 가고 있었습니다.
보다 좋은건, ?xml 이라고 붙여주면, 데이터를 xml형태로 얻을 수 있어,
호스팅 하기에 정말 좋은 모듈입니다.
[주의] cband는 apache 2 모듈이다. apache 1.3.XX용이 아니며 1.3.XX는 mod_throttle을 사용하세요!!
[주요기능]
* Apache2용 가볍운 트래픽제한 모듈
* 사용자별 대역폭제한 기능
* 가상호스트별 대역폭 제한 기능
* 목적지별 대역폭 제한 기능
* 제한기능:
o 모든사용자 대역폭 제한
o 다운로드 속제 제한
o 초당요청수 제한
o 아이피대역별 제한
* Support for virtualhosts
* Support for defined users
* 제한결과 웹을 통한 확인 (/cband-status)
* 각 사용자별 제한 결과 확인(/cband-status-me)
1. 설치방법
cd /usr/local
wget http://cband.linux.pl/download/mod-cband-0.9.7.4.tgz
tar xvfpz mod-cband-0.9.7.4.tgz
cd mod-cband-0.9.7.4
./configure --with-apxs=/usr/local/apache/bin/apxs
## 옵션설명
## --with-apxs=/usr/local/apache/bin/apxs : 아파치 apxs경로를 지정합니다.
make
make install
2. 설치확인
- httpd.conf 파일에
LoadModule cband_module modules/mod_cband.so
줄이 추가된것을 볼 수 있습니다.
- 아파치/modules 디렉토리에
mod_cband.so
파일이 추가 된 것을 볼수 있습니다.
3. 기본 설정
====================================
<Location /cband-status>
SetHandler cband-status
Order deny,allow
Deny from all
Allow from 열어줄아이피
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
<VirtualHost *>
ServerName gnux.co.kr
Document /home/gnux/www
CBandLimit 300Mi
CBandPeriod 1D
CBandExceededURL http://manager.gnux.co.kr/traffic_exceeded.html
</VirtualHost>
======================================
위 설정파일은 gnux.co.kr 도메인에
하루에 300M(300*1024*1024byte)의 트래픽을 제공하는 설정입니다.
bit로 따지면, 2.4Gbit/일 트래픽을 제공하는 것입니다.
만약 하루에 300M를 초과했다면, "http://manager.gnux.co.kr/traffic_exceeded.html"
페이지가 뜨며, 지정하지 않았다면, 503 에러 페이지가 뜨게됩니다.
만약!. 제한을 하지 않고 관찰만 하려 한다면, CBandPeriod 부분만 남기고 삭제합니다.
4. 상황별 설정
1) 자료실 속도 제한
==============================
<VirtualHost *>
ServerName file.gnux.co.kr
Document /home/gnux/file
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 30
</VirtualHost>
==============================
위 설정은 file.gnux.co.kr 도메인에 대해서
속도를 1024kbps 로 제한하며, 초당 10번의 연결,
동시접속자를 30으로 제한하는 예제입니다.
2) 사용자 일트래픽 제공 및 초과시 연결수 제한.
==============================
<VirtualHost *>
ServerName doly.gnux.co.kr
Document /home/gnux/doly
CBandLimit 100Mi
CBandExceededSpeed 128 5 15
CBandPeriod 1D
</VirtualHost>
==============================
위 설정은 doly.gnux.co.kr도메인에 대해
하루에 100Mbyte의 트레픽을 제공하며,
100M를 초가했다면,
속도를 128bps로 제한, 초당 5번의 연결,
동시접속자를 15로 제한하는 예제입니다.
3) 한 사용자에 여러 도메인이 있다면?
==============================
<CBandUser host_user1>
CBandUserLimit 100Mi
CBandUserPeriod 1D
</CBandUser>
<VirtualHost *>
ServerName aaa.co.kr
Document /home/host_user1/aaa
CBandUser host_user1
</VirtualHost>
<VirtualHost *>
ServerName bbb.co.kr
Document /home/host_user1/bbb
CBandUser host_user1
</VirtualHost>
==============================
위 설정은 host_user1이라는 가상 사용자를 지정한다음.
그 사용자는 하루에 100Mbyte를 사용할수 있게합니다.
그런다음, aaa.co.kr, bbb.co.kr 모두 host_user1의
트래픽을 사용하게 설정하였습니다.
4) IP대역에 따라 속도를 제한하고 싶다면?
==============================================
<CBandClass class_1>
CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClass class_2>
CBandClassDst 222.97.189.0/24
</CBandClass>
<VirtualHost *>
ServerName intranet.gnux.co.kr
Document /home/gnux/intranet
CBandClassRemoteSpeed class_1 50Mbps 10 30
CBandClassRemoteSpeed class_2 300kbps 10 30
</VirtualHost>
==============================================
위 설정은, 내부아이피 192.168.0.XXX 에서,
50Mbps의 대역폭과, 초당 10번의 요청, 동시접속자 30을 설정하며,
다른 ip대역 222.97.189.XXX에서는
300kpbs, 초당 10번의 요청, 동시접속자 30을 설정합니다.
5. 사용량 확인.
http://도메인/cband-status
http://도메인/cband-status-me
** xml 형태로 데이터를 얻고 싶다면?
http://도메인/cband-status?xml
http://도메인/cband-status-me?xml
6. 지시자 및 단위 설명 (필요시 찾아보세요!!)
1) 단위.
* 전송속도 단위
o kbps, Mbps, Gbps - bits per second: 1024, 1024*1024 , 1024*1024*1024 bps
o kb/s, Mb/s, Gb/s - bytes per second: 1024, 1024*1024, 1024*1024*1024 b/s
o 기본 : kbps
* 트래픽 쿼터 단위
o K, M, G - bytes: 1000, 1000*1000 ,1000*1000*1000 bytes
o Ki, Mi, Gi - bytes: 1024, 1024*1024, 1024*1024*1024 bytes
o 기본 : K
* 시간(기간) 단위
o S, M, H, D, W - 초, 분, 시간, 일, 주
o 기본 : S
2) 지시자들
(1) 이름 : CBandDefaultExceededURL
설명 : 제한을 초과했을때 보여줄 URL (지정하지 않으면, 503 에러 페이지)
문맥 : Server config
문법 : CBandDefaultExceededURL URL
(2)이름 : CBandDefaultExceededCode
설명 : 제한을 초과했을시 보여줄 에러 코드
문맥 : Server config
문법 : CBandDefaultExceededCode HTTP_CODE
예제 : CBandDefaultExceededCode 509
(3)이름 : CBandScoreFlushPeriod
설명 : scoreboard 파일에 기록할 요청수, mod_cband 의 성능에 영향을 준다.
기본값 : 1
문맥 : Server config
문법 : CBandScoreFlushPeriod 요청수
예제 : CBandScoreFlushPeriod 100 ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)
(4)이름 : CBandSpeed
설명 : 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정
문맥 : <Virtualhost>
문법 : CBandSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandSpeed 1024 10 30
최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.
(5)이름 : CBandRemoteSpeed
설명 : 접속자(IP)의 최대속도, 요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
문맥 : <Virtualhost>
문법 : CBandRemoteSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandRemoteSpeed 20kb/s 3 3
접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.
(6)이름 : CBandClassRemoteSpeed
설명 : 정의한 class(ip 범위)에 대해 최대속도, 요청수, 접속수 제한
문맥 : <Virtualhost>
문법 : CBandClassRemoteSpeed class_name kbps rps
class_name - 이미 정의한 클래스 이름 (IP범위)
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : <CBandClass googlebot_class>
CBandClassDst 66.249.64/24
CBandClassDst 66.249.65/24
CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
위에서 정의한 클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도,
초당 3개의 요청, 동시 접속 3개로 제한.
(7)이름 : CBandRandomPulse
설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
부하가 많을때는 자동 Off된다.
문맥 : Global
문법 : CBandRandomPulse On/Off
(8)이름 : CBandLimit
설명 : 제한할 전송량을 설정한다. (기간은 CBandPeriod 에서 설정)
문맥 : <Virtualhost>
문법 : CBandLimit limit
limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
예제 : CBandLimit 10M
전송양을 10M(10*1000*1000bytes)로 제한한다.
CBandLimit 10Mi
전송양을 10M(10*1024*1024bytes)로 제한한다.
(9)이름 : CBandClassLimit
설명 : 정의한 class(ip범위)에 대해 제한할 전송량 설정.
문맥 : <Virtualhost>
문법 : CBandClassLimit class_name limit
class_name - 이미 정의한 클래스 이름(ip범위)
limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
(10)이름 : CBandExceededURL
설명 : 제한을 초과했을시 보여줄 URL, 지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
문맥 : <Virtualhost>
문법 : CBandExceededURL URL
(11)이름 : CBandExceededSpeed
설명 : 전송양을 초과했을시 , 전송속도 제한 설정.
문맥 : <Virtualhost>
문법 : CBandExceededSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
(12)이름 : CBandScoreboard
설명 : 가상호스트의 scoreboard 파일 지정. (성능향상을 위해 필요)
문맥 : <Virtualhost>
문법 : CBandScoreboard path
(path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
(13)이름 : CBandPeriod
설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 : <Virtualhost>
문법 : CBandPeriod period
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandPeriod 1W (1주일)
CBandPeriod 14D (14일)
CBandPeriod 60M (60분)
(14)이름 : CBandPeriodSlice
설명 : 기간이 길때는 나눌 기간을 명시한다.
기본값 : slice_len = limit
문맥 : <Virtualhost>
문법 : CBandPeriodSlice slice_length
예제 : CBandLimit 100G
CBandPeriod 4W
CBandPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.
(15)이름 : <CBandUser>
설명 : 새로운 cband 가상 사용자 설정
문맥 : Server config
문법 : <CBandUser user_name>
(16)이름 : CBandUserSpeed
설명 : cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
문맥 : <CBandUser>
문법 : CBandUserSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandUserSpeed 100kb/s 10 5
(17)이름 : CBandUserLimit
설명 : cband 가상 사용자의 저송 용량 제한.
문맥 : <CBandUser>
문법 : CBandUserLimit limit
limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
예제 : CBandUserLimit 10M
CBandUserLimit 10Mi
(18)이름 : CBandUserClassLimit
설명 : cband 가상 사용자의 정의한 class(ip범위)에 대해 제한할 전송량 설정
문맥 : <CBandUser>
문법 : CBandUserClassLimit class_name limit
class_name - 지정한 class(IP범위)이름
limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
(19)이름 : CBandUserExceededURL
설명 : cband 가상 사용자의, 제한을 초과했을시 보여줄 URL,
지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
문맥 : <CBandUser>
문법 : CBandUserExceededURL URL
(20)이름 : CBandUserExceededSpeed
설명 : cband 가상 사용자의, 전송양을 초과했을시 , 전송속도 제한 설정.
문맥 : <CBandUser>
문법 : CBandUserExceededSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
(21)이름 : CBandUserScoreboard
설명 : cband 가상 사용자의, scoreboard 파일 지정.
문맥 : <CBandUser>
문법 : CBandUserScoreboard path
(path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
(22) 이름 : CBandUserPeriod
설명 : cband 가상 사용자의, 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 : <CBandUser>
문법 : CBandUserPeriod period
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandUserPeriod 1W
CBandUserPeriod 14D
CBandUserPeriod 60M
(23)이름 : CBandUserPeriodSlice
설명 : cband 가상 사용자의, 기간을 나눌 기간 명시
기본값 : slice_len = limit
문맥 : <CBandUser>
문법 : CBandUserPeriodSlice slice_length
예제 : CBandUserLimit 100G
CBandUserPeriod 4W
CBandUserPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.
7. 마치며..
이것으로 현재 최신버전의 mod_cband 설치 및 운영, 상세 지시자 설명 하는 강좌를 마치겠습니다.
처음 이 모듈을 발견했을때 너무 너무 기뻣고, 바로 적용해 테스트 하였습니다.
특히 xml로 데이터를 추출할 수 있어 가공함에 있어 아주 아주 편리했습니다.
국내에는 아직 mod_cband에 과한 강좌가 없어 많은 사람들에게
도움을 주기 위해서 이렇게 강좌를 작성합니다.
본 강좌에 대해서 오타 및 문제가 있다면, doly골뱅이superuser.co.kr으로 메일
한통 바랍니다.
2006년 6월 ... 모기들이 태어나는 계절에... 도리...
## 참고문서
http://cband.linux.pl
http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling
-- 출처 : 리눅스포털(원문 : http://www.superuser.co.kr/home/lecture/index.php?leccode=10588)
참고 자료
Apache + Throttle(mod_throttle) 을 이용해서 트래픽정보를 구합니다.
[Throttle Status]
http://자신의도메인/throttle-me
실시간으로 볼 수 있으며 자신의 일일 트래픽량이 증가시 웹서버에서 Throttle 연동해 있기 때문에 초과시 자동적으
로 트래픽량 초과 안내 페이지가 나오면 일일 트래픽량으로 제한이므로 하루가 지나면 다시 초기화로 다시 계산해서
그 정보가 계산됩니다.
% - 허용된 트래픽에서 몇퍼센트를 사용
Hits - 도메인의 히트수
Refused - 트래픽이 초과하였을때 접속하여 요청거부된 횟수
KBytes Sents - 회원님의 도메인 트래픽량
KBytes Per Hits - 한 히트당 트래픽량의 평균치
Polocy - Volume 트래픽 제한을 양으로 계산
Limits - 트래픽 제한양 제한선 입니다.
Period - 1d 하루 24시간을 기준으로 트래픽을 계산한다는 뜻입니다.
Period Elapsed - 24시간중 소요된 시간
Idle time - 최종 히트후 요청 대기시간
참조 사이트 : http://www.snert.com/Software/mod_throttle/
##############
## 설치하기 ##
##############
일반적으로 아파치에서 mod_throttle 을 연동하기 위해서는 2가지 방식의 컴파일을 지원하지만 여기서는
DSO 방식으로 설치하도록 한다.
---------------------------------------------------------------------
STATIC 방식 (APACHE mod_throttle 부분)
./configure --disable-shared=throttle
--add-module=/usr/local/mod_throttle-3.1/mod_throttle.c
---------------------------------------------------------------------
DSO 방식
cd /usr/local/mod_throttle-3.1
make install
mod_throttle.so를 apache디렉토리 libexec안에 복사해줍니다.
그런후 httpd.conf에 mod_throttle부분을 수정.
(compile시 apxs에 위치를 Makefile안에 전체경로로 변경후 make하세요.)
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
---------------------------------------------------------------------
아파치에서 mod_throttle 을 설치하기 위한 순서
1. 다운로드
2. 컴파일 / 설치
3. apache 설정파일 내부에서의 mod_throttle 부분을 인식
4. 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
5. 트래픽확인
■ 다운로드
[root@www download]# wget http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
[root@www download]# tar xzf mod_throttle312.tgz
[root@www download]# cd mod_throttle-3.1.2/
[root@www mod_throttle-3.1.2]# ll
total 188
-rw-r--r-- 1 111 users 7233 Dec 3 2000 CHANGES.txt
drwxr-xr-x 2 111 users 4096 Dec 2 2000 Img
-rw-r--r-- 1 111 users 1525 Dec 2 2000 LICENSE.txt
-rw-r--r-- 1 111 users 1009 Dec 2 2000 Makefile
-rw-r--r-- 1 111 users 26492 Dec 3 2000 index.shtml
-rw-r--r-- 1 111 users 97711 Dec 3 2000 mod_throttle.c
-rw-r--r-- 1 111 users 277 Dec 2 2000 patch.proxy_util.c
-rw-r--r-- 1 111 users 4 Dec 3 2000 version3.cnt
■ 컴파일 / 설치
[root@www mod_throttle-3.1.2]# make install
apxs -c mod_throttle.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -fpic -DSHARED_MODULE -
I/usr/local/apache2/include -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o
apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache2/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache2/libexec/mod_throttle.so
chmod 755 /usr/local/apache2/libexec/mod_throttle.so
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
cp /usr/local/apache2/conf/httpd.conf.new /usr/local/apache2/conf/httpd.conf
rm /usr/local/apache2/conf/httpd.conf.new
root@www mod_throttle-3.1.2]# apachectl restart
■ apache 설정파일 내부에서의 mod_throttle 부분을 인식
<IfModule mod_throttle.c>
# 트래픽이 초과되면 나오는 에러페이지
ErrorDocument 503 http://192.168.1.1/error/error.html
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
Deny from all
# 다른접근을 모두 거부하고 특정 아이피에서만 throttle-status 를 확인 하도록 설정
# 여기서는 192.168.1.1 과 192.168.1.2 의 IP 주소만 접근할 수 있다.
Allow from 192.168.1.1
Allow from 192.168.1.2
</Location>
<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me
</Location>
</IfModule>
■ 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
트래픽을 걸때의 여러가지 방법이 존재한다.
ThrottlePolicy Volume 100M 1d //하루 100M
ThrottlePolicy Request 1000 1d //하루 천번
ThrottleClientIP 1100 volume 2 10 //로그 1100k
<VirtualHost 192.168.1.1>
ServerName test1.com
DocumentRoot /home/test1/pubic_html
# 전송량 1일 300M
ThrottlePolicy Volume 300M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test2.com
DocumentRoot /home/test2/public_html
ServerName test2.com
# 전송량 1일 400M
ThrottlePolicy Volume 400M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test3.org
DocumentRoot /home/test3/public_html
ServerName test3.org
# 전송량 1일 500M
ThrottlePolicy Volume 500M 1d
</VirtualHost>
■ 트래픽확인
1. 첫번째방법은 자신의 트래픽만 보는 방법 ( 일반 사용자인 경우 )
http://자신의도메인/throttle-me
2. 두번째방법은 모든 가상호스트를 보는 방법 ( 관리자인 경우 )
( ※ 중요!!! 이때는 아무나 접근할 수 없도록 접근 IP 막는 조치를 취해야 한다. 그렇지 않으면 모든 사용자의
정보를 다른 사용자가 볼 수도 있고 트래픽을 초기화 할 수도 있다. )
http://자신의도메인/throttle-status
하지만, Apache2로 넘어오면서 mod_throttle 모듈이나 mod_bandwidth 모듈을 더 이상 사용할 수 없게 된다.
대신 mod_cband 모듈이라는 걸출한 녀석을 사용할 수 있다. mod_cband 모듈을 통해 트래픽 제한과 대역폭 제한, 그리고 트래픽 제한 결과 등을 웹을 통해 확인할 수 있게 된다.
Debian에서는 libapache2-mod-cband 패키지가 있으므로, 소스 컴파일할 필요 없이 패키지를 설치하면 된다. 현재 libapache2-mod-cband 패키지의 mod_cband 모듈 버전은 0.9.7.4 이다.
# apt-get install libapache2-mod-cband
만약 최신 버전을 설치하고 싶다면, 소스 파일을 구해 컴파일하면 된다.
출처: http://linux.tini4u.net
os: centos4.6
아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.
1. mod_cband 설치 (최신버전: http://cband.linux.pl/)
http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/
[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# make install 수행 시에 아래와 같은 오류가 발생하는 경우,
...
src/mod_cband.c:1365: error: 'struct conn_rec' has no member named 'remote_addr'
src/mod_cband.c:1365: error: 'struct conn_rec' has no member named 'remote_addr'
apxs:Error: Command failed with rc=65536
.
make: *** [src/.libs/mod_cband.so] \uc624\ub958 1
apache 버전이 2.2 버전대가 아닌, httpd-2.4.1 버전인 관계로 발생하므로
아래와 같이 - 부분을 + 부분으로 수정 후, 저장하여, configure, make, make install을 재수행하면, 정상처리된다.
# vi ./src/mod_cband.c
이때, ./src/.libs/mod_cband.c 라는 파일이 존재하지 않는 상태에서 수행해야 한다.
아래와 같이 - 부분을 + 부분으로 수정 후, 저장하여, configure, make, make install을 재수행하면, 정상처리된다.
# vi ./src/mod_cband.c
이때, ./src/.libs/mod_cband.c 라는 파일이 존재하지 않는 상태에서 수행해야 한다.
-
--- mod-cband-0.9.6.1/src/mod_cband.c 2006-01-21 20:23:27.000000000 -0500
-
+++ mod-cband-0.9.6.1-cov//src/mod_cband.c 2012-02-22 19:23:04.162307962 -0500
-
@@ -1278,7 +1278,7 @@
-
p.bitlen = 32;
-
p.ref_count = 0;
-
p.family = AF_INET;
-
- p.add.sin.s_addr = inet_addr(r->connection->remote_ip);
-
+ p.add.sin.s_addr = inet_addr(r->connection->client_ip);
-
-
node = patricia_search_best(config->tree, &p);
-
-
@@ -1287,7 +1287,7 @@
-
-
if (leaf) {
-
#ifdef DEBUG
-
- fprintf(stderr,"%s leaf %s\n",r->connection->remote_ip,leaf);
-
+ fprintf(stderr,"%s leaf %s\n",r->connection->client_ip,leaf);
-
fflush(stderr);
-
#endif
-
return atoi(leaf);
-
@@ -1307,10 +1307,10 @@
-
if (entry == NULL)
-
return -1;
-
-
- if (c->remote_ip != NULL)
-
- addr = inet_addr(c->remote_ip);
-
+ if (c->client_ip != NULL)
-
+ addr = inet_addr(c->client_ip);
-
else
-
- addr = c->remote_addr->sa.sin.sin_addr.s_addr;
-
+ addr = c->client_addr->sa.sin.sin_addr.s_addr;
-
-
time_now = apr_time_now();
-
hosts = config->remote_hosts.hosts;
...
write "make install" to install module
#make install
...
chmod 755 /usr/local/apache/modules/mod_cband.so
#
2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
|
※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.
3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
|
※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.
|
※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.
4. cband 단위
- 전송속도 단위
kbps, Mbps, Gbps - bits per second, 의미: 1024, 1024*1024, 1024*1024*1024 bps kb/s, Mb/s, Gb/s - bytes per second, 의미: 1024, 1024*1024, 1024*1024*1024 b/s 기본값 : kbps |
- 트래픽 제한 단위
K, M, G - bytes, 의미: 1000, 1000*1000, 1000*1000*1000 bytes Ki, Mi, Gi - bytes, 의미: 1024, 1024*1024, 1024*1024*1024 bytes 기본값: K |
- 시간 단위
S, M, H, D, W - 초, 분, 시간, 일, 주. 의미: 1, 60, 3600, 86400, 604800 Seconds 기본값: S |
5. cband 지시자
이름: CBandDefaultExceededURL 설명: 제한을 초과했을때 보여줄 URL 문맥: Server config 문법: CBandDefaultExceededURL [URL] 예제: CBandDefaultExceededURL http://foobar.com/503.html |
이름: CBandDefaultExceededCode 설명: 제한을 초과했을시 보여줄 에러 코드 문맥: Server config 문법: CBandDefaultExceededCode [HTTP_CODE] 예제: CBandDefaultExceededCode 509 |
이름: CBandScoreFlushPeriod 설명: scoreboard 파일에 기록할 요청수를 정하나, cband 퍼포먼스에 영향을 미칩니다. 기본값: 1 문맥: Server config 문법: CBandScoreFlushPeriod [요청수] 예제: CBandScoreFlushPeriod 100 100번의 요청이 들어오면 scoreboard 파일에 한번 기록합니다. |
이름: CBandSpeed 설명: 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정 문맥: <Virtualhost> 문법: CBandSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: CBandSpeed 1024 10 30 호스트에 대해 1024kbps 전송속도로 제한하며, 초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다. |
이름: CBandRemoteSpeed 설명: 호스트 접속자의 최대속도, 요청수, 접속수 제한 문맥: <Virtualhost> 문법: CBandRemoteSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: CBandRemoteSpeed 20kb/s 3 3 호스트 접속자에 대해 1024kbps 전송속도로 제한하며, 초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다. |
이름: CBandClassRemoteSpeed 설명: IP class의 최대속도, 요청수, 접속수 제한 문맥: <Virtualhost> 문법: CBandClassRemoteSpeed [class_name] [kbps] [rps] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: <CBandClass googlebot_class> CBandClassDst 66.249.64/24 CBandClassDst 66.249.65/24 CBandClassDst 66.249.79/24 </CBandClass> CBandClassRemoteSpeed googlebot_class 20kb/s 2 3 googlebot_class 클래스에 대해 20kb/s 전송속도로 제한하며, 초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다. |
이름: CBandRandomPulse 설명: 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 방법입니다. 문맥: Global 문법: CBandRandomPulse [On/Off] 예제: CBandRandomPulse On |
이름: CBandLimit 설명: 제한할 전송량을 설정한다. 문맥: <Virtualhost> 문법: CBandLimit [limit] limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) 예제: CBandLimit 10M 전송량을 10M(10*1000*1000bytes)로 제한한다. CBandLimit 10Mi 전송량을 10M(10*1024*1024bytes)로 제한한다. |
이름: CBandClassLimit 설명: IP class에 대해 제한할 전송량 설정 문맥: <Virtualhost> 문법: CBandClassLimit [class_name limit] class_name - 클래스 이름 limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) |
이름: CBandExceededURL 설명: 제한을 초과했을때 보여줄 URL 문맥: <Virtualhost> 문법: CBandExceededURL [URL] 예제: CBandExceededURL http://foobar.com/503.html |
이름 : CBandExceededSpeed 설명: 전송량을 초과했을때의 전송속도 제한 설정 문맥: <Virtualhost> 문법: CBandExceededSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 |
이름: CBandScoreboard 설명: 가상호스트의 scoreboard 파일 지정 문맥: <Virtualhost> 문법: CBandScoreboard [path] |
이름: CBandPeriod 설명: 제한기간 문맥: <Virtualhost> 문법: CBandPeriod [period] period - 사용단위: S(초), M(분), H(시간), D(일), W(주) 예제: CBandPeriod 1D |
이름 : CBandPeriodSlice 설명: 기간을 나눌 기간 명시 기본값: slice_len = limit 문법: CBandPeriodSlice [slice_length] 예제: CBandLimit 100G CBandPeriod 4W CBandPeriodSlice 1W 지정된 제한값을 1주일 단위로 나누어 사용 합니다. 위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다. |
이름: <CBandUser> 설명: 새로운 cband 가상 사용자 설정 문맥: Server config 문법: <CBandUser user_name> |
이름: CBandUserSpeed 설명: cband 가상 사용자의 속도, 요청수, 동시 접속수 제한 문맥: <CBandUser> 문법: CBandUserSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: CBandUserSpeed 100kb/s 10 5 |
이름: CBandUserLimit 설명: cband 가상 사용자의 전송 용량 제한 문맥: <CBandUser> 문법: CBandUserLimit [limit] limit - 사용용량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) 예제: CBandUserLimit 10M 전송량을 10M(10*1000*1000bytes)로 제한한다. CBandUserLimit 10Mi 전송량을 10M(10*1024*1024bytes)로 제한한다. |
이름: CBandUserClassLimit 설명: cband 가상 사용자의 IP class에 대해 제한할 전송량 설정 문맥: <CBandUser> 문법: CBandUserClassLimit [class_name] [limit] class_name - 클래스 이름 limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) |
이름 : CBandUserExceededURL 설명: cband 가상 사용자의 제한을 초과했을때 보여줄 URL 문맥: <CBandUser> 문법: CBandUserExceededURL URL 예제: CBandDefaultExceededURL http://foobar.com/503.html |
이름: CBandUserExceededSpeed 설명: cband 가상 사용자의 전송량을 초과했을때의 전송속도 제한 설정 문맥: <CBandUser> 문법: CBandUserExceededSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 |
이름: CBandUserScoreboard 설명: cband 가상 사용자의 scoreboard 파일 지정 문맥: <CBandUser> 문법: CBandUserScoreboard [path] |
이름: CBandUserPeriod 설명: cband 가상 사용자의 제한기간 문맥: <CBandUser> 문법: CBandUserPeriod [period] period - 사용단위: S(초), M(분), H(시간), D(일), W(주) 예제: CBandPeriod 1D |
이름: CBandUserPeriodSlice 설명: cband 가상 사용자의 기간을 나눌 기간 명시 기본값: slice_len = limit 문맥: <CBandUser> 문법: CBandUserPeriodSlice [slice_length] 예제: CBandLimit 100G CBandPeriod 4W CBandPeriodSlice 1W 지정된 제한값을 1주일 단위로 나누어 사용 합니다. 위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다. |
6. 통계화면 보기
관리자모드 - http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml
7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
|
mod_cband(아파치2의 트래픽 제어모듈 like mod_throttle&mod_bandwidth)
0. 내가 원한는 것?
예전에 apache 1은 mod_throttle으 로 가상호스트별 트래픽 측정 및 제한이 가능했습니다.
이 트래픽 제한 기능은 호스팅을 하기위해서는 필수입니다. 어떤 도메인에서 많이 사용하는지
아는 것은 아주 중요한 일이기 때문입니다. 하지만,
apache2를 쓰면 이놈을 포기할 수 밖에 없었습니다. 검색하다 .. cband를 찾았습니다.
mod_throttle과 기능및 구조 거의 흡사하며, mod_bandwidth의 기능까지 포함했고,
최근에 개발되어 계속 성능 향상이 되어 가고 있었습니다.
보다 좋은건, ?xml 이라고 붙여주면, 데이터를 xml형태로 얻을 수 있어,
호스팅 하기에 정말 좋은 모듈입니다.
[주의] cband는 apache 2 모듈이다. apache 1.3.XX용이 아니며 1.3.XX는 mod_throttle을 사용하세요!!
[주요기능]
* Apache2용 가볍운 트래픽제한 모듈
* 사용자별 대역폭제한 기능
* 가상호스트별 대역폭 제한 기능
* 목적지별 대역폭 제한 기능
* 제한기능:
o 모든사용자 대역폭 제한
o 다운로드 속제 제한
o 초당요청수 제한
o 아이피대역별 제한
* Support for virtualhosts
* Support for defined users
* 제한결과 웹을 통한 확인 (/cband-status)
* 각 사용자별 제한 결과 확인(/cband-status-me)
1. 설치방법
cd /usr/local
wget http://cband.linux.pl/download/mod-cband-0.9.7.4.tgz
tar xvfpz mod-cband-0.9.7.4.tgz
cd mod-cband-0.9.7.4
./configure --with-apxs=/usr/local/apache/bin/apxs
## 옵션설명
## --with-apxs=/usr/local/apache/bin/apxs : 아파치 apxs경로를 지정합니다.
make
make install
2. 설치확인
- httpd.conf 파일에
LoadModule cband_module modules/mod_cband.so
줄이 추가된것을 볼 수 있습니다.
- 아파치/modules 디렉토리에
mod_cband.so
파일이 추가 된 것을 볼수 있습니다.
3. 기본 설정
====================================
<Location /cband-status>
SetHandler cband-status
Order deny,allow
Deny from all
Allow from 열어줄아이피
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
<VirtualHost *>
ServerName gnux.co.kr
Document /home/gnux/www
CBandLimit 300Mi
CBandPeriod 1D
CBandExceededURL http://manager.gnux.co.kr/traffic_exceeded.html
</VirtualHost>
======================================
위 설정파일은 gnux.co.kr 도메인에
하루에 300M(300*1024*1024byte)의 트래픽을 제공하는 설정입니다.
bit로 따지면, 2.4Gbit/일 트래픽을 제공하는 것입니다.
만약 하루에 300M를 초과했다면, "http://manager.gnux.co.kr/traffic_exceeded.html"
페이지가 뜨며, 지정하지 않았다면, 503 에러 페이지가 뜨게됩니다.
만약!. 제한을 하지 않고 관찰만 하려 한다면, CBandPeriod 부분만 남기고 삭제합니다.
4. 상황별 설정
1) 자료실 속도 제한
==============================
<VirtualHost *>
ServerName file.gnux.co.kr
Document /home/gnux/file
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 30
</VirtualHost>
==============================
위 설정은 file.gnux.co.kr 도메인에 대해서
속도를 1024kbps 로 제한하며, 초당 10번의 연결,
동시접속자를 30으로 제한하는 예제입니다.
2) 사용자 일트래픽 제공 및 초과시 연결수 제한.
==============================
<VirtualHost *>
ServerName doly.gnux.co.kr
Document /home/gnux/doly
CBandLimit 100Mi
CBandExceededSpeed 128 5 15
CBandPeriod 1D
</VirtualHost>
==============================
위 설정은 doly.gnux.co.kr도메인에 대해
하루에 100Mbyte의 트레픽을 제공하며,
100M를 초가했다면,
속도를 128bps로 제한, 초당 5번의 연결,
동시접속자를 15로 제한하는 예제입니다.
3) 한 사용자에 여러 도메인이 있다면?
==============================
<CBandUser host_user1>
CBandUserLimit 100Mi
CBandUserPeriod 1D
</CBandUser>
<VirtualHost *>
ServerName aaa.co.kr
Document /home/host_user1/aaa
CBandUser host_user1
</VirtualHost>
<VirtualHost *>
ServerName bbb.co.kr
Document /home/host_user1/bbb
CBandUser host_user1
</VirtualHost>
==============================
위 설정은 host_user1이라는 가상 사용자를 지정한다음.
그 사용자는 하루에 100Mbyte를 사용할수 있게합니다.
그런다음, aaa.co.kr, bbb.co.kr 모두 host_user1의
트래픽을 사용하게 설정하였습니다.
4) IP대역에 따라 속도를 제한하고 싶다면?
==============================================
<CBandClass class_1>
CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClass class_2>
CBandClassDst 222.97.189.0/24
</CBandClass>
<VirtualHost *>
ServerName intranet.gnux.co.kr
Document /home/gnux/intranet
CBandClassRemoteSpeed class_1 50Mbps 10 30
CBandClassRemoteSpeed class_2 300kbps 10 30
</VirtualHost>
==============================================
위 설정은, 내부아이피 192.168.0.XXX 에서,
50Mbps의 대역폭과, 초당 10번의 요청, 동시접속자 30을 설정하며,
다른 ip대역 222.97.189.XXX에서는
300kpbs, 초당 10번의 요청, 동시접속자 30을 설정합니다.
5. 사용량 확인.
http://도메인/cband-status
http://도메인/cband-status-me
** xml 형태로 데이터를 얻고 싶다면?
http://도메인/cband-status?xml
http://도메인/cband-status-me?xml
6. 지시자 및 단위 설명 (필요시 찾아보세요!!)
1) 단위.
* 전송속도 단위
o kbps, Mbps, Gbps - bits per second: 1024, 1024*1024 , 1024*1024*1024 bps
o kb/s, Mb/s, Gb/s - bytes per second: 1024, 1024*1024, 1024*1024*1024 b/s
o 기본 : kbps
* 트래픽 쿼터 단위
o K, M, G - bytes: 1000, 1000*1000 ,1000*1000*1000 bytes
o Ki, Mi, Gi - bytes: 1024, 1024*1024, 1024*1024*1024 bytes
o 기본 : K
* 시간(기간) 단위
o S, M, H, D, W - 초, 분, 시간, 일, 주
o 기본 : S
2) 지시자들
(1) 이름 : CBandDefaultExceededURL
설명 : 제한을 초과했을때 보여줄 URL (지정하지 않으면, 503 에러 페이지)
문맥 : Server config
문법 : CBandDefaultExceededURL URL
(2)이름 : CBandDefaultExceededCode
설명 : 제한을 초과했을시 보여줄 에러 코드
문맥 : Server config
문법 : CBandDefaultExceededCode HTTP_CODE
예제 : CBandDefaultExceededCode 509
(3)이름 : CBandScoreFlushPeriod
설명 : scoreboard 파일에 기록할 요청수, mod_cband 의 성능에 영향을 준다.
기본값 : 1
문맥 : Server config
문법 : CBandScoreFlushPeriod 요청수
예제 : CBandScoreFlushPeriod 100 ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)
(4)이름 : CBandSpeed
설명 : 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정
문맥 : <Virtualhost>
문법 : CBandSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandSpeed 1024 10 30
최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.
(5)이름 : CBandRemoteSpeed
설명 : 접속자(IP)의 최대속도, 요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
문맥 : <Virtualhost>
문법 : CBandRemoteSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandRemoteSpeed 20kb/s 3 3
접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.
(6)이름 : CBandClassRemoteSpeed
설명 : 정의한 class(ip 범위)에 대해 최대속도, 요청수, 접속수 제한
문맥 : <Virtualhost>
문법 : CBandClassRemoteSpeed class_name kbps rps
class_name - 이미 정의한 클래스 이름 (IP범위)
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : <CBandClass googlebot_class>
CBandClassDst 66.249.64/24
CBandClassDst 66.249.65/24
CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
위에서 정의한 클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도,
초당 3개의 요청, 동시 접속 3개로 제한.
(7)이름 : CBandRandomPulse
설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
부하가 많을때는 자동 Off된다.
문맥 : Global
문법 : CBandRandomPulse On/Off
(8)이름 : CBandLimit
설명 : 제한할 전송량을 설정한다. (기간은 CBandPeriod 에서 설정)
문맥 : <Virtualhost>
문법 : CBandLimit limit
limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
예제 : CBandLimit 10M
전송양을 10M(10*1000*1000bytes)로 제한한다.
CBandLimit 10Mi
전송양을 10M(10*1024*1024bytes)로 제한한다.
(9)이름 : CBandClassLimit
설명 : 정의한 class(ip범위)에 대해 제한할 전송량 설정.
문맥 : <Virtualhost>
문법 : CBandClassLimit class_name limit
class_name - 이미 정의한 클래스 이름(ip범위)
limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
(10)이름 : CBandExceededURL
설명 : 제한을 초과했을시 보여줄 URL, 지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
문맥 : <Virtualhost>
문법 : CBandExceededURL URL
(11)이름 : CBandExceededSpeed
설명 : 전송양을 초과했을시 , 전송속도 제한 설정.
문맥 : <Virtualhost>
문법 : CBandExceededSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
(12)이름 : CBandScoreboard
설명 : 가상호스트의 scoreboard 파일 지정. (성능향상을 위해 필요)
문맥 : <Virtualhost>
문법 : CBandScoreboard path
(path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
(13)이름 : CBandPeriod
설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 : <Virtualhost>
문법 : CBandPeriod period
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandPeriod 1W (1주일)
CBandPeriod 14D (14일)
CBandPeriod 60M (60분)
(14)이름 : CBandPeriodSlice
설명 : 기간이 길때는 나눌 기간을 명시한다.
기본값 : slice_len = limit
문맥 : <Virtualhost>
문법 : CBandPeriodSlice slice_length
예제 : CBandLimit 100G
CBandPeriod 4W
CBandPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.
(15)이름 : <CBandUser>
설명 : 새로운 cband 가상 사용자 설정
문맥 : Server config
문법 : <CBandUser user_name>
(16)이름 : CBandUserSpeed
설명 : cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
문맥 : <CBandUser>
문법 : CBandUserSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandUserSpeed 100kb/s 10 5
(17)이름 : CBandUserLimit
설명 : cband 가상 사용자의 저송 용량 제한.
문맥 : <CBandUser>
문법 : CBandUserLimit limit
limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
예제 : CBandUserLimit 10M
CBandUserLimit 10Mi
(18)이름 : CBandUserClassLimit
설명 : cband 가상 사용자의 정의한 class(ip범위)에 대해 제한할 전송량 설정
문맥 : <CBandUser>
문법 : CBandUserClassLimit class_name limit
class_name - 지정한 class(IP범위)이름
limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
(19)이름 : CBandUserExceededURL
설명 : cband 가상 사용자의, 제한을 초과했을시 보여줄 URL,
지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
문맥 : <CBandUser>
문법 : CBandUserExceededURL URL
(20)이름 : CBandUserExceededSpeed
설명 : cband 가상 사용자의, 전송양을 초과했을시 , 전송속도 제한 설정.
문맥 : <CBandUser>
문법 : CBandUserExceededSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
(21)이름 : CBandUserScoreboard
설명 : cband 가상 사용자의, scoreboard 파일 지정.
문맥 : <CBandUser>
문법 : CBandUserScoreboard path
(path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
(22) 이름 : CBandUserPeriod
설명 : cband 가상 사용자의, 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 : <CBandUser>
문법 : CBandUserPeriod period
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandUserPeriod 1W
CBandUserPeriod 14D
CBandUserPeriod 60M
(23)이름 : CBandUserPeriodSlice
설명 : cband 가상 사용자의, 기간을 나눌 기간 명시
기본값 : slice_len = limit
문맥 : <CBandUser>
문법 : CBandUserPeriodSlice slice_length
예제 : CBandUserLimit 100G
CBandUserPeriod 4W
CBandUserPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.
7. 마치며..
이것으로 현재 최신버전의 mod_cband 설치 및 운영, 상세 지시자 설명 하는 강좌를 마치겠습니다.
처음 이 모듈을 발견했을때 너무 너무 기뻣고, 바로 적용해 테스트 하였습니다.
특히 xml로 데이터를 추출할 수 있어 가공함에 있어 아주 아주 편리했습니다.
국내에는 아직 mod_cband에 과한 강좌가 없어 많은 사람들에게
도움을 주기 위해서 이렇게 강좌를 작성합니다.
본 강좌에 대해서 오타 및 문제가 있다면, doly골뱅이superuser.co.kr으로 메일
한통 바랍니다.
2006년 6월 ... 모기들이 태어나는 계절에... 도리...
## 참고문서
http://cband.linux.pl
http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling
-- 출처 : 리눅스포털(원문 : http://www.superuser.co.kr/home/lecture/index.php?leccode=10588)
참고 자료
- mod_cband 사용법
- 아파치 2.X 버전에서 mod_cband를 이용한 트래픽관리
- apache2 트래픽 관리 mod_cband
- 출처 : http://mooo.org/
'Linux > CentOS' 카테고리의 다른 글
Linux용 백신관리자 (0) | 2012.03.09 |
---|---|
웹 DDOS 공격 방어(mod_evasive) (0) | 2012.03.09 |
Adding Modules to httpd.conf With Apache 2 (0) | 2012.03.08 |
CentOS 6.3 APM 설치 (0) | 2012.03.07 |
CentOS 6.2 APM ( http 2.2.22, mysql 5.5.20, php 5.3.10) 설치 (0) | 2012.03.07 |