관리자 글쓰기
[apache] cband 설치 (트래픽제어모듈)
2017. 1. 17. 10:23 - 미나리다

**cband설명**

아파치2 트래픽제어모듈

   * Apache2용 가볍운 트래픽제한 모듈

    * 사용자별 대역폭제한 기능

    * 가상호스트별 대역폭 제한 기능

    * 목적지별 대역폭 제한 기능

    * 제한기능:

          o 모든사용자 대역폭 제한

          o 다운로드 속제 제한

          o 초당요청수 제한

          o 아이피대역별 제한

    * Support for virtualhosts

    * Support for defined users

    * 제한결과 웹을 통한 확인 (/cband-status)

    * 각 사용자별 제한 결과 확인(/cband-status-me)


**지시어**

  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 이렇게 나눠 처리 된다.




**cband 설정**

꼭 mod-cband-0.9.7.5 버전을 사용!!!!!!!

# wget http://pkgs.fedoraproject.org/repo/pkgs/mod_cband/mod-cband-0.9.7.5.tgz/5c5d65dc9abe6cdc6931b6dd33be5018/mod-cband-0.9.7.5.tgz


# tar -zxvf mod-cband-0.9.7.5.tgz 

# cd mod-cband-0.9.7.5

# ./configure --with-apxs=/usr/local/apache/bin/apxs

# make

# make install

# vim /usr/local/apache/conf/httpd.conf

LoadModule cband_module       modules/mod_cband.so //자동으로 추가되어있다


<IfModule mod_cband.c>


    <Location /cband-status-me>


        SetHandler cband-status-me


    </Location>


    <Location /~*/cband-status-me>


        SetHandler cband-status-me


    </Location>


    <Location /cband-status>


        SetHandler cband-status


        Order deny,allow


        Deny from all


        Allow from 123.123.123.123 //허용할IP주소


    </Location>


</IfModule>



가상호스트에 기간 용량 트래피초과시 출력될페이지 설정한다,

# vim httpd-vhost.conf


<VirtualHost *>


    ServerName mydomain.com    


    Document /home/www


    CBandLimit 300Mi                

    CBandPeriod 1D                 

    CBandExceededURL http://

</VirtualHost>


/etc/init.d/apachectl restart


status확인

http://서버IP또는도메인/cband-status

http://서버IP또는도메인/cband-status?xml