아파치 2.X 버전에서 mod_cband를 이용한 트래픽관리 and 내꺼httpd.conf 파일 수정

리눅스/문제점 2012. 1. 19. 00:14

출처 : http://blog.naver.com/jhlim7110/120037660897

작성자 : 기술지원부 김 삼 수 <kiss@nextline.net>
 
아파치 2.X 버전에서 mod_cband를 이용한 트래픽관리
 
mod_cband 이란?
Apache에서 개별홈페이지의 일hit수 제한 및 트래픽을 관리하기 위해 사용하는 모듈로서apache 2.x버전에서 사용할 수 있으며 apache를 Dos방식과 Static방식 중 어느 방식으로 설치했느냐에 따라 적재방법 또한 다릅니다. DOS방식의 mod_cband 모듈적재 및 설정 방법을 알아보도록 하겠습니다.
 
[주요기능]
Apache2용 가볍운 트래픽제한 모듈
   * 사용자별 대역폭제한 기능
   * 가상호스트별 대역폭 제한 기능
   * 목적지별 대역폭 제한 기능
   * 제한기능:
         o 모든사용자 대역폭 제한
         o 다운로드 속제 제한
         o 초당요청수 제한
         o 아이피대역별 제한
   * Support for virtualhosts
   * Support for defined users
   * 제한결과 웹을 통한 확인 (/cband-status)
   * 각 사용자별 제한 결과 확인(/cband-status-me)

 
( 1 ) 다운로드

http://freshmeat.net/redir/mod_cband/60304/url_tgz/mod-cband-0.9.7.5.tgz
http://cband.linux.pl/downloads
 
리눅스 쉘 명령어
 
① tar zxvf mod-cband-0.9.7.5.tgz 파일을 다운로드 합니다.
wget은 웹에서 자동적으로 파일을 받아오는데 사용되는 유틸리티이며 HTTP, HTTPS, FTP 프로토콜을 지원합니다.
[root@nextline bin]# wget
http://freshmeat.net/redir/mod_cband/60304/url_tgz/mod-cband-0.9.7.5.tgz
 

 
( 2 ) 압축해제
 
[tar 명령어 옵션]

tar 명령어는 파일을 묶거나 풀 때 사용되는 리눅스 명령어 입니다.
c : tar 파일을 생성할 때 사용합니다.(여러 개의 파일을 하나의 파일로 묶을 때)
v : 묶을 때나 풀어줄 때 파일들의 내용을 자세하게 보여줍니다.
z : gzip과 관련하여 압축이나 해제를 한꺼번에 하려고 할 때 사용합니다.
x : 주어진 이름의 파일에 대하여 추출합니다.
사용법 : tar [옵션] 파일명
 
리눅스 쉘 명령어

① 다운로드된 mod-cband-0.9.7.5.tgz 파일의 압축을 해제 합니다.
[root@nextline bin]# tar zxvf mod-cband-0.9.7.5.tgz
 


( 3 ) 컴파일
 
리눅스 쉘 명령어

① 압축 해제한 mod-cband-0.9.7.5 디렉토리로 이동 합니다.
[root@nextline bin]# cd mod-cband-0.9.7.5

② ./configure 명령을 실행합니다.
./configure 명령은 프로그램을 설치하기 위해 환경설정을 하는 것으로 ./configure 후Makefile파일이 생성됩니다. 모듈을 적재하기 위해 컴파일을 합니다.
[root@nextline mod_throttle-3.1.2]# ./configure
 

 
( 4 ) make
 
리눅스 쉘 명령어

① make 명령을 실행합니다.
make 명령은 대상 디렉토리의 Makefile이라는 이름을 가지고 있는 파일을 보고, 거기에 설정되어 있는 컴파일 명령을 shell을 통해서 실행하는 명령입니다. ./configure 작업에 의해 생성된 Makefile을 참조하게 되며 소스코드를 실제로 컴파일해서 bibary 파일을 생성합니다.
[root@nextline mod_throttle-3.1.2]# make
 
 
 
( 5 ) make install

① make install 명령을 실행합니다.
make 명령에 의해 생성된 binary 파일을 지정된 디렉토리로 이동시켜주며 실제 프로 그램 설치 작업이 이루어집니다.
[root@nextline mod_throttle-3.1.2]# make install
 
 
   
( 6 ) mod_cband.so 파일생성 확인

① ls 명령어를 이용하여 아파치 모듈들이 위치한 modules 디렉토리에 mod_cband.so 파일이 생성 되었는지 확인합니다.
[root@nextline mod-cband-0.9.7.5]# ls /usr/local/apache/modules/
 
  
 
( 7 ) 모듈적재 확인

 
[vi 에디터 사용법]
 
사용형식 : vi [옵션] [생성할 파일명/편집할 파일명]
 
vi 에디터는 입력모드, 명령모드, 실행모드로 구분됩니다.

입력모드 : vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기때문에 문자를 입력하기 전에 앞의 단축키중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다.
 
명령모드 : 커서이동/문자삭제/문자(열)교체/문자열검색 등을 할수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다.
 
실행모드 : 특별한 명령어를 실행하는 모드로서 명령어모드에서 ":"(콜론)를 누르면 vi 화면 하단 좌측에 vi 특수명령어를 입력할 수 있습니다.
 
실행모드의 일반적으로 쓰이는 특수 명령어
q : 수정 작업이 이루어지지 않은 상태에서 vi 편집기에서 빠져나옵니다.
q! : 수정 작업이 이루어진 부분을 적용시키지 않고 vi 편집기를 강제로 빠져나옵니다.
w : 수정된 작업을 저장합니다.
wq : 수정된 작업을 저장하고 vi 편집기에서 빠져나옵니다.
 
초기 명령어모드 -> 입력모드진입 -> 편집 -> 명령어모드 -> 실행모드 -> 종료
 
① httpd.conf파일에 모듈이 등록되었는지 확인합니다.
[root@nextline mod-cband-0.9.7.5]# vi /usr/local/apache/conf/httpd.conf
LoadModule cband_module         libexec/mod_cband.so
 

 
( 8 ) httpd.conf파일의 메인 환경설정

메인 설정 부분은 가상호스트에도 공통으로 적용되는 설정으로 mod_cband 모듈을 적용시키기 위해 아파치 환경 설정파일인 httpd.conf을 수정합니다.
 
① vi 에디터를 이용하여 httpd.conf파일을 엽니다.
[root@nextline mod-cband-0.9.7.5]# vi /usr/local/apache/conf/httpd.conf
 
② 아파치에 cband 모듈을 적용시키기 위해 다음 라인을 추가 합니다.
 
<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>
                Order deny,allow
                Deny from all
                Allow from all
        </Location>
</IfModule>
 
 
  ③ 트래픽 관리자모드 접근 ip설정

<Location /cband-status>
                           Order deny,allow
                           Deny from all
                           Allow from all
        </Location>
 
위 설정은 throttle로 분석된 일hit 및 일 트래픽 제한에 대하여 상황페이지를 볼 관리자페이지에 대한 접속제한 설정입니다. 즉 관리자PC 한곳에서만 분석된 결과페이지를 볼 수 있도록 하려면 아래와 같이 수정합니다.
 
관리자 PC 아이피 : XXX.XXX.XXX.XXX

<Location /cband-status>
                           Order deny,allow
                           Deny from all
                           Allow from XXX.XXX.XXX.XXX
         </Location>

 
( 9 ) 가상호스트 환경설정
 
개별 홈페이지 트래픽 현황 및 관리를 하기 위해서는 httpd.conf <Virtual Hosts>부분에 홈페이지 별로 설정을 하여야 합니다.
 
nextline.co.kr 도메인에 하루에 300M(300*1024*1024byte)의트래픽을 제공하는 설정입니다. bit로 따지면, 2.4Gbit/일 트래픽을 제공하는 것입니다. 만약 하루에 300M를 초과했다면, 503 에러 페이지가 뜨게 됩니다.
 
① nextline.co.kr 도메인을 가진 가상호스트를 추가 하도록 하겠습니다.
 
<VirtualHost xxx.xxx.xxx.xxx>
DocumentRoot /home/nextline/public_html
Servername nextline.co.kr
ServerAlias www.nextline.co.kr
CBandLimit 300Mi
CBandPeriod 1D
</VirtualHost>

 

② httpd.conf 설정 후 적용시키기 위해 apache를 재 시작 시켜 줍니다.
[root@nextline mod-cband-0.9.7.5]# /usr/local/apache/bin/apachectl restart

 
( 10 ) 서버전체 cband 상황보기 (관리자모드)
 
일hit수 일전송량의 제한을 웹브라우즈로 확인하기 위하여 다음과 같은 URL로 확인하도록 하겠습니다. 먼저 서버전체의 제한사항을 관리자가 확인하기 위한 예입니다.
cband 페이지는 기본 15초마다 리플레쉬 합니다.
 
① 주도메인이 nextline.co.kr로 설정된 예입니다.
확인하는 방법 :http://IP주소/cband-status
 

② 개별사이트 cband 상황보기 (사용자모드)
확인하는 방법 : http://nextline.co.kr/cband-status-me
 

  
( 11 )지시자 및 단위설명

  단위
  전송속도 단위
  kbps, Mbps, Gbps - bits per second:1024, 1024*1024 , 1024*1024*1024 bps
  kb/s, Mb/s, Gb/s - bytes persecond:  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 - 초, 분, 시간, 일, 주
  기본 : S
 
  지시자들
  이름 : CBandDefaultExceededURL
  설명 : 제한을 초과했을때보여줄 URL  (지정하지 않으면, 503 에러 페이지)
  문맥 : Serverconfig
  문법 :CBandDefaultExceededURL URL
 
  이름 : CBandDefaultExceededCode
  설명 : 제한을 초과했을시 보여줄 에러코드
  문맥 : Server config
  문법 :CBandDefaultExceededCode HTTP_CODE
  예제 :CBandDefaultExceededCode 509 
 
  이름 : CBandScoreFlushPeriod
  설명 : scoreboard 파일에기록할 요청수, mod_cband 의 성능에 영향을 준다.
  기본값 : 1
  문맥 : Server config
  문법 :CBandScoreFlushPeriod 요청수
  예제 :CBandScoreFlushPeriod 100 (매 100번의 요청에 한번씩 scoreboard 파일에 기록)
 
 
  이름 : CBandSpeed
  설명 : 가상호스트 도메인의 최대 속도,요청수, 접속수  설정
  문맥 :<Virtualhost>
  문법 : CBandSpeed kbpsrps max_conn
       kbps - 초당 최대 전송속도
       rps - 초당 최대 요청수
       max_conn - 최대 동시 접속수
       예제 : CBandSpeed 102410 30
       최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.
 
  이름 : CBandRemoteSpeed
  설명 : 접속자(IP)의 최대속도, 요청수, 접속수 제한 (접속자당 설정)
  문맥 :<Virtualhost>
  문법 : CBandRemoteSpeedkbps rps max_conn
        kbps - 초당 최대 전송속도
        rps - 초당최대 요청수
        max_conn - 최대 동시 접속수
        예제 : CBandRemoteSpeed20kb/s 3 3
        접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.
 
  이름 : 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개로 제한.
 
  이름 : CBandRandomPulse
  설명 : 속도 제한을 위해서 임의의파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다. 부하가 많을 때는 자동 Off된다.

  문맥 : Global
  문법 : CBandRandomPulseOn/Off
 
  이름 : 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)로 제한한다.
 
  이름 : CBandClassLimit
  설명 : 정의한 class(ip범위)에대해 제한할 전송량 설정.
  문맥 :<Virtualhost>
  문법 : CBandClassLimitclass_name limit
        class_name - 이미 정의한 클래스 이름(ip범위)
        limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)
 
  이름 : CBandExceededURL
  설명 : 제한을 초과했을시 보여줄URL, 지정하지 않으면 503 에러 발생
  문맥 :<Virtualhost>
  문법 : CBandExceededURLURL
 
  이름 : CBandExceededSpeed
  설명 : 전송양을 초과했을시 , 전송속도제한 설정.
  문맥 :<Virtualhost>
  문법 :CBandExceededSpeed kbps rps max_conn
        kbps - 초당 최대 전송속도
        rps - 초당 최대 요청수
        max_conn - 최대 동시 접속수
  이름 : CBandScoreboard
  설명 : 가상호스트의 scoreboard파일 지정. (성능향상을 위해 필요)
  문맥 :<Virtualhost>
  문법 : CBandScoreboardpath
        (path는 아파치(nobody또는 apache)권한으로 쓰기 가능해야 함)
 
이름 : CBandPeriod
  설명 : 용량제한기간(이 기간이 지나면,측정되었던 용량은 지워진다.)
  문맥 :<Virtualhost>
  문법 : CBandPeriod period
        period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
  예제 : CBandPeriod1W  (1주일)
        CBandPeriod 14D  (14일)
        CBandPeriod 60M  (60분)
 
  이름 : 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 이렇게 나눠 처리 된다.
 
  이름 : <CBandUser>
  설명 : 새로운 cband 가상 사용자설정
  문맥 : Server config
  문법 : <CBandUseruser_name>
 
  이름 : CBandUserSpeed
  설명 : cband 가상 사용자의 속도,요청수, 동시 접속수 제한
  문맥 : <CBandUser>
  문법 : CBandUserSpeedkbps rps max_conn
        kbps - 초당 최대 전송속도
        rps - 초당 최대 요청수
        max_conn - 최대 동시 접속수
  예제 : CBandUserSpeed100kb/s 10 5
 
 
  이름 : CBandUserLimit
  설명 : cband 가상 사용자의 저송용량 제한.
  문맥 : <CBandUser>
  문법 : CBandUserLimitlimit
     limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)
  예제 : CBandUserLimit 10M
        CBandUserLimit 10Mi
 
  이름 : 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)
 
  이름 : CBandUserExceededURL
  설명 : cband 가상 사용자의,제한을 초과했을시 보여줄 URL,
        지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
  문맥 : <CBandUser>
  문법 :CBandUserExceededURL URL
 
  이름 : CBandUserExceededSpeed
  설명 : cband 가상 사용자의,전송양을 초과했을시 , 전송속도 제한 설정.
  문맥 : <CBandUser>
  문법 : CBandUserExceededSpeed kbps rps max_conn
        kbps - 초당 최대 전송속도
        rps - 초당 최대 요청수
        max_conn - 최대 동시 접속수
 
  이름 : CBandUserScoreboard
  설명 : cband 가상 사용자의,scoreboard 파일 지정.
  문맥 : <CBandUser>
  문법 : CBandUserScoreboard path
        (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)
 
  이름 : CBandUserPeriod
  설명 : cband 가상 사용자의, 용량제한기간(기간이 지나면, 측정되었던 용량은 지워진다.)
  문맥 : <CBandUser>
  문법 : CBandUserPeriodperiod
        period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
  예제 : CBandUserPeriod 1W
        CBandUserPeriod 14D
        CBandUserPeriod 60M
 
  이름 : 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 이렇게 나눠 처리 된다.

 
( 12 ) 개별홈페이지 cband 정책 적용 예
 
① 자료실 속도제한
   nextline.net 도메인에 대해서 속도를 1024kbps로 제한하며, 초당 10번의 연결, 동
   시 접속자를 30으로 제한하는 예제입니다.
  
<VirtualHost xxx.xxx.xxx.xxx>
DocumentRoot /home/nextline1/public_html
Servername nextline.net
ServerAlias www.nextline.net
CBandSpeed 1024 10 30
CBandRemoteSpeed 20kb/s 3 30
</VirtualHost>
 
                         
 
 
확인하는 방법 : http://nextline.net/cband-status-me
 
 
② 사용자 일트래픽 제공 및 초과시 연결수 제한 nextline.com 도메인에 대해 하루에 100Mbyte의 트레픽을 제공하며, 100M를 초가했다면, 속도를 128bps로 제한, 초당 5번의 연결, 동시접속자를 15로 제한하는 예제입니다.
 
<VirtualHost xxx.xxx.xxx.xxx>
DocumentRoot /home/nextline2/public_html
Servername nextline.com
ServerAlias www.nextline.com
CBandLimit 100Mi
CBandExceededSpeed 128 5 15
CBandPeriod 1D
</VirtualHost>
 

 
확인하는 방법 : http://nextline.com/cband-status-me

  
   
( 13 ) 그 외 적용 예를 들어보겠습니다.
 
① 한 사용자에 여러 도메인을 운영할 때 입니다.
위 설정은 nextline이라는 가상 사용자를 지정 한 다음 그 사용자는 하루에 100Mbyte를 사용할 수 있게 합니다. 그런 다음, nextline.co.kr nextline.net 모두 nextline의 트래픽사용하게 설정하였습니다.
 
<CBandUser nextline>
  CBandUserLimit 100Mi
  CBandUserPeriod 1D
</CBandUser>

<VirtualHost *>
  ServerName nextline.net    
  Document /home/nextline/public_html
  CBandUser nextline
</VirtualHost>


<VirtualHost *>
  ServerName nextline.co.kr    
  Document /home/nextline/public_html
  CBandUser nextline
</VirtualHost>
 
② IP대역에 따라 속도를 제한 합니다.
내부아이피 192.168.0.XXX 에서, 50Mbps의 대역폭과, 초당 10번의 요청, 동시접속자 30을 설정하며, 다른 ip대역 222.97.189.XXX에서는 300kpbs, 초당 10번의 요청, 동시접속자 30을 설정합니다.
 
<CBandClassclass_1>
  CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClassclass_2>
  CBandClassDst 222.97.189.0/24
</CBandClass>

<VirtualHost *>
  ServerName nextline.co.kr    
  Document /home/nextline/public_html
 CBandClassRemoteSpeed class_1 50Mbps 10 30
 CBandClassRemoteSpeed class_2 300kbps 10 30
</VirtualHost>

 
( 14 ) cband 페이지 보는방법
 
①Virtual Host 
가상호스트의 정책 적용상태와 리셋, 리플레쉬 기능 GByte, MByte, KByte로 설정하여 관리를 할 수 있으며 트래픽 초과시 해당 도메인의 색상이 붉은색 계열로 점차 변경
됩니다.
    
reset all  : 전체 가상호스트에 대해 트래픽 및 정책을 초기화 합니다.
reset     : 해당 가상호스트의 트래픽 및 정책을 초기화 합니다.
refresh   : cband 페이지를 리플레쉬 합니다.
[GB][MB][KB] : 설정내용을 단위 별로 관리 합니다.
 

② Remote clients
접속PC의 클라이언트 IP와 접속 도메인을 가르킵니다.
 
 
③ Server summary
전체 cband 상황을 간략히 보여주는 페이지로 3개의 가상호스트와 1.76MB의 트랙픽이 발생한 상태이며 2.94kbps의 데이터전송 속도를 나타내고 있습니다.




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>
                Order deny,allow
                Deny from all
                Allow from all
        </Location>
</IfModule>


<VirtualHost 192.168.211.129>
DocumentRoot /home
Servername linux.co.kr
ServerAlias 192.168.211.129
CBandLimit 1Gi
CBandPeriod 1D
</VirtualHost>