출처 : http://linux.tini4u.net/stories.php?story=07/01/12/8248075

글쓴이: 티니 (2007년 01월 12일 오전 12:10) 읽은수: 434

--------------------------------------------------------------------------------------
- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]
- 작성일 : 2007-01-11
- 사이트 :
http://linux.tini4u.net/
- 원제목 : 아파치 2.x 에서의 트래픽 제한
- 환 경 : CentOS 4.4, apache 2.2
- 키워드 : mod_cband
--------------------------------------------------------------------------------------
지난 강좌에서 아파치 1.x에서의 트래픽을 제한하는 모듈을 설명해 드렸습니다.
하지만 throttle 모듈은 아파치 1.x에서만 작동하기 때문에 아파치 2.x를 사용하시는 분들은
사용할 수 없다는 최대단점이 있습니다.
또한 최근엔 Legacy 딱지가 붙은 아파치 1.x보다는 최신버전인 아파치 2.x를 사용하시는 분들이
꽤 많기 때문에 그런 분들은 트래픽 제한을 하는데 있어 곤란함을 겪을 수 있습니다.
그렇지만 아파치 2.x에서도 트래픽을 제한할 수 있는 모듈이 있습니다. 바로 cband 모듈 인데요.
이 모듈은 throttle과 매우 흡사한 기능과 구조를 가지고 있지만, 트래픽을 제한하는 기능 말고도
또 한가지의 기능이 있습니다.
바로 대역폭을 제한하는 bandwidth 기능 입니다.
기존 아파치 1.x에서는 트래픽제한은 throttle 모듈을, 대역폭제한은 bandwidth 모듈을 이용했습니다.
그러나 아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.

1. mod_cband 설치 (최신버전:
http://cband.linux.pl/)

[root@localhost]# wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
[root@localhost]# tar xfz mod-cband-0.9.7.5.tgz
[root@localhost]# cd mod-cband-0.9.7.5
[root@localhost]# ./configure --with-apxs=/usr/sbin/apxs
[root@localhost]# make
[root@localhost]# make install


2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
  1. [root@localhost]# vi /etc/httpd/conf/httpd.conf
  2. <IfModule mod_cband.c>
  3.     <Location /cband-status>
  4.         SetHandler cband-status
  5.         Order Deny,Allow
  6.         Deny from All
  7.         Allow from 127.0.0.1 100.100.100.100
  8.     </Location>
  9.     <Location /cband-me>
  10.         SetHandler cband-status-me
  11.         Order deny,allow
  12.         Deny from all
  13.         Allow from all
  14.     </Location>
  15. </IfModule>

  16. ※ SetHandler 설명
    cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
    cband-me -> 사용자 페이지 입니다.

    3. cband 적용
    cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
    아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
    1. ※ 각각의 호스트에 따로따로 설정해줄 때
    2. <VirtualHost 192.168.0.1>
    3.     ServerName foobar.com
    4.     ServerAlias www.foobar.com
    5.     DocumentRoot /home/foobar/public_html
    6.     ErrorLog logs/foobar-err
    7.     CustomLog logs/foobar-acc combined
    8.     CBandLimit 100Mi
    9.     CBandPeriod 1D
    10. </VirtualHost>

    11. ※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.

      1. ※ 하나의 유저(foobar)가 여러개의 호스트를 사용하고 있는 경우 (트래픽 공유)
      2. <CBandUser foobar>
      3.     CBandUserLimit 100Mi
      4.     CBandUserPeriod 1D
      5. </CBandUser>
      6. <VirtualHost 192.168.0.1>
      7.     ServerName foobar.com
      8.     ServerAlias www.foobar.com
      9.     DocumentRoot /home/foobar/public_html
      10.     ErrorLog logs/foobar-err
      11.     CustomLog logs/foobar-acc combined
      12.     CBandUser foobar
      13. </VirtualHost>
      14. <VirtualHost 192.168.0.1>
      15.     ServerName foobar2.com
      16.     ServerAlias www.foobar2.com
      17.     DocumentRoot /home/foobar2/public_html
      18.     ErrorLog logs/foobar2-err
      19.     CustomLog logs/foobar2-acc combined
      20.     CBandUser foobar
      21. </VirtualHost>

      22. ※ 위 설정은 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를 변경해주는것도 하나의 일이 될 수 있습니다.
        따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
        1. [root@localhost]# vi /etc/httpd/conf/httpd.conf
        2. <IfModule mod_cband.c>
        3.     <Location /cband-status>
        4.         SetHandler cband-status
        5.         AuthName "트래픽관리 페이지"
        6.         AuthType Basic
        7.         AuthUserFile /home/foobar/.htpasswd
        8.         require valid-user
        9.     </Location>
        10.     <Location /cband-me>
        11.         SetHandler cband-status-me
        12.         Order deny,allow
        13.         Deny from all
        14.         Allow from all
        15.     </Location>
        16. </IfModule>
        17. [root@localhost]# htpasswd -c /home/foobar/.htpasswd ID

신고

+ Recent posts

티스토리 툴바