1. 설치파일 받기
http://cband.linux.pl/download
(접속이 잘 안되니 첨부파일을 다운받아서 설치하면 됩니다.)
[Stable](안정화)버전중 높은 버전으로 다운로드 받으면 되며 글 쓰는 시점 가장 최근버전은 0.9.7.4이다.
젠투나 데비안, 페도라를 위한 패키지도 있으니 편한버전으로 다운로드받길 바란다.
2. 설치하기
● 설치하기에 앞서..
패키지 버전으로 설치할때는 상관없으나 만약 아파치를 컴파일하여 사용하고 있다면 컴파일시 동적모드(DSO)로 설치를 해주었는지 살펴보고 만약 정적모드(Static)로 설치하였다면 다시 컴파일 하여야 한다.
wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
tar -zxvf mod-cband-0.9.7.5.tgz
cd mod-cband-0.9.7.5
설정된 글씨체가 작게 설정되어있는관계로 설치전에 글씨체 크기를 좀 더 크게 해준다.
#vi /usr/local/src/mod-cband-0.9.7.5/src/mod_cband.c
2468 번째 줄
"body { font-family: sans-serif; font-size: 0.9em; }\n"
"td { padding-left: 0.5em; padding-right: 0.8em; }\n"
"div.section { margin-top: 1.5em; margin-bottom: 0.8em; }\n"
-> 이부분을 적당한 크기로 수정해 주시면 됩니다.(이미 설치를 해버린 상태라면 make clean 후 make, make install)
./configure
make
make install
※ 정상적으로 설치가 되었다면, 아파치의 httpd.conf파일에 'LoadModule cband_module modules/mod_cband.so' 해당 구문이 추가 되었을것이다.
추가되지 않았다면 정상적으로 설치가 되지 않은것이므로 확인을 하여야 한다.
※ configure할때 apxs관련 에러가 나올 경우가 있다.
이 경우에 apxs의 경로를 안다면 './configure --with-apxs=apxs경로'를 적어주면 된다.
만약 apxs의 경로를 모른다면 'which apxs'로 찾아보고 그래도 없다면 find를 사용하자.
find / -name apxs
혹은
#PATH=$PATH:/usr/local/apache/bin
#export path
해준 후 make 해줘도 됨.
3. 설정하기
mod_throttle의 throttle-status와 throttle-me의 역활을 할수 있게 설정한다.
httpd.conf 마지막줄에 아래의 구문을 추가하도록 한다.
--------------------------------- httpd.conf ----------------------------------
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
--------------------------------------------------------------------------------
설정을 완료하고 Apache를 재시작시키고 http://서버주소/cband-status로 접속해보면
throttle-status와는 좀 다른 살짝 복잡하고 알록달록한 페이지를 만날수 있다.
4. 설정하기2 (VirtualHost 트래픽제한하기)
대부분의 유저가 mod_throttle 및 mod_bandwidth를 사용하는 이유가 VirtualHost별 트래픽제한을 목적으로 두고 있을것이다.
mod_cband라고 설정방법이 크게 다르진 않다.
예제1) VirtualHost별 트래픽제한하기
<VirtualHost *>
.
.
CBandLimit 500Mi
CBandPeriod 1D
CBandExceededURL http://test.com/traffic_over.html
# test.com에 대해 1일에 500Mbyte 의 트레픽을 허용하며 그 트레픽을 초과하면 http://test.com/traffic_over.html 을 출력합니다.
</VirtualHost>
예제2) 여러개의 주소를 사용하는 사용자의 트래픽 묶어서 제한하기
<대부분 웹호스팅을 하거나 할 경우 한 사용자가 여러개의 도메인을 사용하는 경우가 많고, 그에 따라 여러개의 <VirtualHost> 를 가지게 되는 경우가 빈번합니다. 그럴 땐 어떻게 하느냐?
CBandUserLimit 300Mi
CBandUserPeriod 1D
</CBandUser>
<VirtualHost *:80>
ServerName oper.or.kr
DocumentRoot /usr/local/www/data
CBandUser user
</VirtualHost>
<VirtualHost *:80>
ServerName ik.oper.or.kr
DocumentRoot /usr/local/www/data
CBandUser user
</VirtualHost>
일종의 클래스 개념입니다. user 라는 클래서는 1일에 300Mbyte 의 전송량을 할당받고, oper.or.kr 과 ik.oper.or.kr 도메인이 user 클래스의 영향을 받는다는 구문입니다. CBandExceededURL 를 지정하지 않았기 때문에 트레픽을 초과하면 503 에러를 출력합니다.
이 외에도 VirtualHost 별로 대역폭 설정 및 접속 IP 별로 대역폭 설정 등을 할 수 있지만, 그 부분은 다루지 않겠습니다. (왜냐? 역시 초보라..)
설정을 다 하셨으면 apache 를 재시작해 주시고요. 이제 http://Domain/cband-status 와 http://Domain/cband-status-me 로 접속해 확인합니다. 물론 위에서 설정한 Domain 으로 접속해야겠죠?
위 정보는 이곳에서 얻어왔습니다. 아래의 설정 값 역시 이곳에서.. ^^; (귀찮음?) 보다 자세한 것은 이곳을 한번 살펴보시고 해결이 안되신다면 코멘트로 질문 달아주시면 아는 것을 답변해 드리겠습니다.
* 전송속도 단위
o kbps, Mbps, Gbps - bits per second:1024, 1024*1024 , 1024*1024*1024 bps
o kb/s, Mb/s, Gb/s - bytes persecond: 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 에러 페이지)
문맥 : Serverconfig
문법 :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 kbpsrps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandSpeed 102410 30
최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.
(5) 이름 : CBandRemoteSpeed
설명 : 접속자(IP)의 최대속도,요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
문맥 :<Virtualhost>
문법 : CBandRemoteSpeedkbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandRemoteSpeed20kb/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 - 최대 동시 접속수
예제 : <CBandClassgooglebot_class>
CBandClassDst 66.249.64/24
CBandClassDst 66.249.65/24
CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeedgooglebot_class 20kb/s 2 3
위에서 정의한클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도, 초당 3개의 요청, 동시 접속 3개로 제한.
(7) 이름 : CBandRandomPulse
설명 : 속도 제한을 위해서 임의의파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
부하가 많을때는 자동 Off된다.
문맥 : Global
문법 : CBandRandomPulseOn/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>
문법 : CBandClassLimitclass_name limit
class_name - 이미 정의한 클래스 이름(ip범위)
limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)
(10) 이름 : CBandExceededURL
설명 : 제한을 초과했을시 보여줄URL, 지정하지 않으면 503 에러 발생 (가상호스트에서)
문맥 :<Virtualhost>
문법 : CBandExceededURLURL
(11) 이름 : CBandExceededSpeed
설명 : 전송양을 초과했을시 , 전송속도제한 설정.
문맥 :<Virtualhost>
문법 :CBandExceededSpeed kbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
(12) 이름 : CBandScoreboard
설명 : 가상호스트의 scoreboard파일 지정. (성능향상을 위해 필요)
문맥 :<Virtualhost>
문법 : CBandScoreboardpath
(path는 아파치(www)권한으로 쓰기가능해야 함)
(13) 이름 : CBandPeriod
설명 : 용량제한기간(이 기간이 지나면,측정되었던 용량은 지워진다.)
문맥 :<Virtualhost>
문법 : CBandPeriod period
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandPeriod1W (1주일)
CBandPeriod 14D (14일)
CBandPeriod 60M (60분)
(14) 이름 : CBandPeriodSlice
설명 : 기간이 길때는 나눌 기간을명시한다.
기본값 : slice_len = limit
문맥 :<Virtualhost>
문법 : CBandPeriodSliceslice_length
예제 : CBandLimit 100G
CBandPeriod 4W
CBandPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.
(15) 이름 : <CBandUser>
설명 : 새로운 cband 가상 사용자설정
문맥 : Server config
문법 : <CBandUseruser_name>
(16) 이름 : CBandUserSpeed
설명 : cband 가상 사용자의 속도,요청수, 동시 접속수 제한
문맥 : <CBandUser>
문법 : CBandUserSpeedkbps rps max_conn
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandUserSpeed100kb/s 10 5
(17) 이름 : CBandUserLimit
설명 : cband 가상 사용자의 저송용량 제한.
문맥 : <CBandUser>
문법 : CBandUserLimitlimit
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는 아파치(www)권한으로 쓰기가능해야 함)
(22) 이름 : CBandUserPeriod
설명 : cband 가상 사용자의,용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 : <CBandUser>
문법 : CBandUserPeriodperiod
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandUserPeriod 1W
CBandUserPeriod 14D
CBandUserPeriod 60M
(23) 이름 : CBandUserPeriodSlice
설명 : cband 가상 사용자의,기간을 나눌 기간 명시
기본값 : slice_len = limit
문맥 : <CBandUser>
문법 :CBandUserPeriodSlice slice_length
예제 : CBandUserLimit100G
CBandUserPeriod 4W
CBandUserPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.
## 참고문서
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_throttle과 다른점은 Period와 트래픽Limit을 따로 지정해준다는것 외에는 없는것 같다. 사용하는 단위도 M, G 로 별다를바 없다.
(단위에 대한 자세한 내용은 http://cband.linux.pl/documentation 에서 확인할수 있다.)
한가지 다른점을 들자면 mod_throttle사용시 여러VirtualHost를 묶을 경우 별다른 방법이 없어 그냥 Directory로 제한을 하곤 했는데(mod_throttle의 기능에 대해 자세히 알지 못해 이 방법을 사용했을수도 있음을 미리 밝힌다..-_-)
User를 명명해 묶을수 있다는 기쁨을 표하지만, 유저가 직접 확인할수 없다는부분에 대해서는 mod_throttle의 디렉토리로 묶는 방법과 같아 살짝 아쉽다.
이 부분에 대해서는 많은 삽질을 거쳐봐야 할것 같다.
54