시스템/Linux2011. 11. 29. 16:46

예전의 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 에 
    설정을 해줘야 합니다.

 <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
Posted by 소울하트