예전의 apache1 에서는 mod_throttle 나 mod_bandwidth 로 트래픽 모니터링 및 제한이 가능하였습니다.
하지만 apache2 에서는 사용할 수 없기때문에 모니터링 모듈을 찾아보다 mod_cband 를 찾게 되었습니다.
여러개의 웹사이트를 운영하거나 웹호스팅을 한다면 이 모듈은 필수라고 생각합니다.
어떤 도메인에서 얼만큼의 트래픽을 사용하는지 파악하기 위해서 이지요.
(참고 하자면 mod_cband 는 apache 2 모듈 입니다 .)
주요기능을 살펴보자면 ..
- apache2 용 트래픽제한 모듈(실제 적용해서 서비스 해보았는데 서버에 무리 없이 적용가능한 가벼운 모듈로 생각됩니다.)
- 사용자별 대역폭 제한
- 가상호스트별 대역폭 제한
- 목적지별 대역폭 제한
- 다운로드 속도 제한
- 초당 요청수 제한
- 아이피대역별 제한
- 결과 또는 모니터링을 웹페이지에서 확인
- 각 사용자(또는 도메인)별로 제한 결과 확인
이정도가 있다고 볼수 있습니다.
1. 설치 방법
wget http://fresh.t-systems-sfr.com/unix/privat/mod-cband-0.9.7.5.tgz tar xvzf mod-cband-0.9.7.5.tgz cd mod-cband-0.9.7.5 ./configure --with-apxs=/usr/local/apache/bin/apxs make cd src gcc -shared -Wl,-soname,mod_cband.so.1 -o mod_cband.so mod_cband.o cp -p mod_cband.so /usr/local/apache/modules/ cd .. make install ls -al /usr/local/apache/modules/mod_cband.so |
※ 특이사항이라면.. wget 으로 mod_cband 를 받는 주소에 해당 파일이 없어 404 오류가 발생합니다.
(많이 알려진 wget http://cband.linux.pl/download/mod-cband-0.9.7.4.tgz 이 주소도 오류가 발생합니다.)
그리하여 해당 cband 파일을 첨부하였으니 다운받아 설치 하시면 됩니다.
- 통상적으로 make 다음에 바로 make install 하면 설치가 됩니다.
위 설치 방법은 일반적으로 설치가 안될때 위와 같이 gcc 로 컴파일을 해주면 됩니다.
2 . 설치 확인
- httpd.conf 파일을 확인해 보면
LoadModulecband_module modules/mod_cband.so
위와 같이 추가된 것을 확인할 수 있습니다.
3. 기본 설정
- 추가적으로 웹페이지에서 결과를 확인하거나 가상호스트 또는 사용자에 cband 를 적용시키려면 httpd.conf 에
설정을 해줘야 합니다.
위와 같이 설정하면 되며, 기본적으로 모니터링만 적용하려면 각각의 <VirtualHost> 안에
CBandPeriod 1D
옵션을 추가하면 http://도메인/cband-status 에서 해당 가상호스트에 대하여 모니터링(결과) 확인이 가능합니다.
4. 상황별 설정 예제
1) 속도 제한
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 30
위 옵션을 추가할 경우 추가한 가상호스트에 대하여 속도를 1024kbps 로 , 초당 10번의 연결 ,
동시접속자를 30 으로 제한하게 됩니다.
2) 사용자 일일트래픽 및 초과시 연결 수 제한
CBandLimit 1000Mi
CBandExceededSpeed 500 5 10
CBandPeriod 1D
위 옵션을 추가할 경우 일일트래픽 1000Mbyte 을 초과할 경우
속도를 500bps 로, 초당 5번의 연결, 동시접속자를 10으로 제한하게 됩니다.
3) 그룹 으로 묶어서 동일하게 제한
<CBandUser host_Group1>
CBandUserLimit 100Mi
CBandUserPeriod 1D
</CBandUser>
위와 같이 하나의 그룹(host_Group1)으로 지정하는 옵션을 추가하고
CBandUser host_user1
각 가상호스트에 위와 같은 옵션을 넣으면 위 그룹에서 설정한 옵션처럼
하루에 100Mbyte 를 사용할 수 있게 됩니다.
4) 접속하는 IP대역에 따라 속도를 제한
<CBandClassclass_1>
CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClassclass_2>
CBandClassDst 10.1.1.0/24
</CBandClass>
위와 같이 옵션을 추가하고 가상호스트 사이에
CBandClassRemoteSpeed class_1 100Mbps 10 30
CBandClassRemoteSpeed class_2 300kbps 10 30
옵션을 추가하면 IP 192.168.X.X 대역에서는 100Mbps 의 대역폭, 초당 10번의 요청, 동시접속자 30을 설정하고
다른 IP 10.1.1.X 에서는 300kbps 의 대역폭, 초당 10번의 요청, 동시접속다 30을 설정하게 됩니다.
5. 사용량 확인
http://도메인/cband-status
(많이 알려진 wget http://cband.linux.pl/download/mod-cband-0.9.7.4.tgz 이 주소도 오류가 발생합니다.)
그리하여 해당 cband 파일을 첨부하였으니 다운받아 설치 하시면 됩니다.
- 통상적으로 make 다음에 바로 make install 하면 설치가 됩니다.
위 설치 방법은 일반적으로 설치가 안될때 위와 같이 gcc 로 컴파일을 해주면 됩니다.
2 . 설치 확인
- httpd.conf 파일을 확인해 보면
LoadModulecband_module modules/mod_cband.so
위와 같이 추가된 것을 확인할 수 있습니다.
3. 기본 설정
- 추가적으로 웹페이지에서 결과를 확인하거나 가상호스트 또는 사용자에 cband 를 적용시키려면 httpd.conf 에
설정을 해줘야 합니다.
<IfModule mod_cband.c> <Location /cband-status-me> SetHandler cband-status-me </Location> <Location /cband-status> Order deny,allow Deny from all Allow from 접속 허용할 IP </Location> </IfModule> |
위와 같이 설정하면 되며, 기본적으로 모니터링만 적용하려면 각각의 <VirtualHost> 안에
CBandPeriod 1D
옵션을 추가하면 http://도메인/cband-status 에서 해당 가상호스트에 대하여 모니터링(결과) 확인이 가능합니다.
4. 상황별 설정 예제
1) 속도 제한
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 30
위 옵션을 추가할 경우 추가한 가상호스트에 대하여 속도를 1024kbps 로 , 초당 10번의 연결 ,
동시접속자를 30 으로 제한하게 됩니다.
2) 사용자 일일트래픽 및 초과시 연결 수 제한
CBandLimit 1000Mi
CBandExceededSpeed 500 5 10
CBandPeriod 1D
위 옵션을 추가할 경우 일일트래픽 1000Mbyte 을 초과할 경우
속도를 500bps 로, 초당 5번의 연결, 동시접속자를 10으로 제한하게 됩니다.
3) 그룹 으로 묶어서 동일하게 제한
<CBandUser host_Group1>
CBandUserLimit 100Mi
CBandUserPeriod 1D
</CBandUser>
위와 같이 하나의 그룹(host_Group1)으로 지정하는 옵션을 추가하고
CBandUser host_user1
각 가상호스트에 위와 같은 옵션을 넣으면 위 그룹에서 설정한 옵션처럼
하루에 100Mbyte 를 사용할 수 있게 됩니다.
4) 접속하는 IP대역에 따라 속도를 제한
<CBandClassclass_1>
CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClassclass_2>
CBandClassDst 10.1.1.0/24
</CBandClass>
위와 같이 옵션을 추가하고 가상호스트 사이에
CBandClassRemoteSpeed class_1 100Mbps 10 30
CBandClassRemoteSpeed class_2 300kbps 10 30
옵션을 추가하면 IP 192.168.X.X 대역에서는 100Mbps 의 대역폭, 초당 10번의 요청, 동시접속자 30을 설정하고
다른 IP 10.1.1.X 에서는 300kbps 의 대역폭, 초당 10번의 요청, 동시접속다 30을 설정하게 됩니다.
5. 사용량 확인
http://도메인/cband-status
※ 도메인들은 알아볼수 없도록 삭제했습니다.^^
XML 형태로 데이터를 확인하려면
http://도메인/cband-status?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 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는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
(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는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
(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
'시스템 > Linux' 카테고리의 다른 글
make: *** [ext/mysqli/mysqli_api.lo] Error 1 (0) | 2012.03.15 |
---|---|
vsftpd 설치와 옵션(Cent OS) (0) | 2012.01.16 |
Apache conf 파일 분석 ( 2.2.x 이하 apache ) (0) | 2012.01.16 |
Linux 환경에서 IP alias 기능 사용 (0) | 2011.12.12 |
리눅스 싱글모드 부팅(root 패스워드 변경) (0) | 2011.12.01 |
PHP 5.2.1 설치시 gptr ERROR (0) | 2011.12.01 |
PHP 설치시 configure: error: Cannot find imap library (libc-client.a). 오류 (0) | 2011.12.01 |
IMAP 설치 (0) | 2011.12.01 |