apache2 트래픽 모듈 mod_cband 사용법

by 조쉬 posted Feb 14, 2019
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

Apachectl 버전 확인
[root@cakeon ~]# /usr/local/httpd/bin/apachectl -v
Server version: Apache/2.2.16 (Unix)
Server built:   Aug 21 2010 16:10:06

1. Cband 설치(mod-cband-0.9.7.5.tgz)
[root@cakeon mod-cband-0.9.7.5]# wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz

mod-cband-0.9.7.5.gz

 

 

[root@localhost src]# vi /usr/local/src/mod_cband/src/mod_cband.c

 

 

2467 "\n<style type=\"text/css\">\n"
2468 "body       { font-family: sans; font-size: 10pt; }\n"
2469 "table      { font-family: tachoma, helvetica, verdana, sans; border: 1px solid #d0d0d0; }\n"
2470 "tr     { font-family: tachoma, helvetica, verdana, sans; border: 1px solid #d0d0d0; }\n"
2471 "td     { padding-left: 0.5em; padding-right: 9pt; }\n"
2472 "td.refresh { background-color: #0de2cb; text-align: right; }\n"
2473 "td.speed   { background-color: #ffa1a1; text-align: left; }\n"
2474 "td.speedc  { background-color: #ffb1b1; text-align: left; }\n"
2475 "td.remote_odd  { background-color: #b4bfff; text-align: left; }\n"
2476 "td.remote_even { background-color: #bfcfff; text-align: left; }\n"
2477 "a      { text-decoration: none; color: #606060; }\n"
2478 "a:hover    { text-decoration: underline; }\n"
2479 "h1, h2     { font-family: tachoma, helvetica, verdana, sans}\n"
2480 ".small     { font-size: smaller; }\n"
2481 "div.section    { margin-top: 20px; margin-bottom: 10px; }\n"
2482 "div.footer { margin-top: 40px; text-align: center; font-size: smaller; }\n"
2483 "</style>\n\n";

 

[root@cakeon mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/httpd/bin/apxs
[root@cakeon mod-cband-0.9.7.5]# make && make install

 

 


2. 모듈 확인(설치 후 자동 생성)
[root@cakeon ~]# vi /usr/local/httpd/conf/httpd.conf
LoadModule cband_module         modules/mod_cband.so

참고) 모듈 설치시 자동으로 위의 내용이 생성됩니다.

3. httpd.conf mod_cband.c 설정(추가)
[root@byungun ~]# vi /usr/local/apache2/conf/httpd.conf
----------------------------------------------------------------------------------------------
<IfModule mod_cband.c>
        <Location /cband-status>
                SetHandler cband-status
        </Location>
        <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 all
        </Location>
</IfModule>
 

 

 


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

http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/
[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# 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.  
  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>

※ 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>

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

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

※ 위 설정은 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.  
  11.     <Location /cband-me>
  12.         SetHandler cband-status-me
  13.         Order deny,allow
  14.         Deny from all
  15.         Allow from all
  16.     </Location>
  17. </IfModule>
  18. [root@localhost]# htpasswd -c /home/foobar/.htpasswd ID