보안접속
공지사항
질문과 답변
미확인입금자리스트
세금계산서 신청
트래픽 초기화 신청
자주하는 질문
팁&테크
자료실
  네임서버 정보
1차 : ns.k2com.co.kr
        211.239.173.145
2차 : ns2.k2com.co.kr
        211.239.112.50
  서비스 신청
  결제계좌안내
계좌 : 112-910015-50604
은행 : 하나은행
예금주 : (주)옐로우삭스
  고객상담센터
상담전화 : 02-552-5415
상담시간 :
    월-금요일 09:30~18:30
    토,일,공휴일 휴무
기본배너
Home > 고객지원센터 > 팁&테크
 
 
     팁&테크
작 성 자 눅스맨 날 짜 2005-03-16  조   회 4377 
제    목   [서버관리]Apache 모듈로 트래픽관리-2
안녕하세요 눅스맨입니다.

Apache에서 트래픽을 제어하는 방법으로 mod_throttle과 mod_bandwidth가 있읍니다.

mod_throttle는 파일전송의 횟수나 양을 실시간으로 제어하는 것으로 초/분/시/일/주로 
최대 전송량/전송횟수등을 지정할 수 있습니다.
mod_bandwidth는 파일전송의 대역폭을 실시간으로 제어하는 것으로 최대전송속도 
최소전송속도 파일사이즈 범위별 전송속도등을 지정할 수 있읍니다.

예를 들어 특정사이트의 일일 최대 전송량을 5G로 제한하고 싶으면 mod_throttle로 
특정사이트의 최대 전송속도를 5Mbps로 제한하고 싶으면 mod_bandwidth로 설정할 수 있습니다.

이번에는 웹호스팅 업체에서 트래픽 제어를 위해 많이 사용하고 있는 mod_bandwidth를 
설정해보도록 하겠습니다.


1. 다운로드
   http://www.cohprog.com/mod_bandwidth.html
   ftp://ftp.cohprog.com/pub/apache/module/1.3.0/
   http://www.cohprog.com/v3/bandwidth/doc-en.html

      
2. 설치
   아파치 웹서버의 설치하는 방식에 따라 2가지 방법으로 설치합니다.

 - 아파치 웹서버를 STATIC으로 설치시
   mod_bandwidth.c 소스를 아파치 소스 모듈 디렉토리로 복사
   ]# cp mod_bandwidth.c /usr/local/src/apache-1.3.x/src/modules/extra/
   ]$ cd /usr/local/src/apache-1.3.x/
   ]$ ./configure --prefix=/usr/local/apache \
      --activate-module=src/modules/php4/libphp4.a \
      --add-module=src/modules/extra/mod_bandwidth.c ... 옵션 생략 ...
   .. 기타 설치 내용 생략 ..
   
   설치확인은 아파치 모듈리스트를 출력해서 볼 수 있습니다.       
   ]$ /usr/local/apache/bin/httpd -l
    Compiled-in modules:
    http_core.c
    mod_env.c
    mod_log_config.c
    mod_mime.c
    ...
    mod_php4.c
    mod_bandwidth.c
    suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

 
 - 아파치 웹서버를 DSO로 설치시
   ]$ /usr/local/apache/bin/apxs -i -a -c mod_bandwidth.c
   
   설치확인은 libexec 디렉토리에서 mod_bandwidth.so 공유라이브러리를 확인합니다.
   ]$ ls /usr/local/apache/libexec
      httpd.exp          mod_bandwidth.so*  mod_info.so*          mod_speling.so*
      libphp4.so*        mod_cern_meta.so*  mod_log_agent.so*     mod_status.so*
      libproxy.so*       mod_cgi.so*        mod_log_config.so*    mod_throttle.so*
      ... 
    

3. 기본설정

 - 모듈활성화
   만약 아파치가 DSO로 컴파일 되었다면 httpd.conf에 모듈 활성화 하는 2개의 라인이 
   추가로 있어야 합니다.
   -------------------------------------------------------------------
   LoadModule bandwidth_module    libexec/mod_bandwidth.so
   AddModule mod_bandwidth.c
   -------------------------------------------------------------------

 - 대역폭 제한을 위해 필요한 디렉토리 생성
   누구나 읽고/쓰고/실행이 가능한 퍼미션의 디렉토리를 생성합니다.
   실제적으로는 Apache의 유저인 nobody가 읽고/쓰고/실행이 가능하면 됩니다.
   매뉴얼에는 /tmp/bandwidth로 설명이 되어있지만 tmpwatch에 의해서 삭제될 가능성이 있기때문에
   디렉토리를 변경하여 사용하시기 바랍니다.

   ]$ mkdir -p /usr/local/apache/bandwidth/link
   ]$ mkdir -p /usr/local/apache/bandwidth/master
 
   ]$ chown -R root:nobody /usr/local/apache/bandwidth
   ]$ chmod -R 770 /usr/local/apache/bandwidth


4. 세부설정

   아래의 내용을 httpd.conf내에 추가해 줍니다.
   -------------------------------------------------------------------
   <IfModule mod_bandwidth.c>
     # 디렉토리로 설정하는 경우는 각 디렉토리마다 설정할 필요는 없으나
     # 가상호스트일 경우에는 각 섹션마다 BandWidthModule On 의 설정이 필요합니다.
     BandWidthModule On

     # 대역폭 제한을 위해 필요한 디렉토리 경로 
     BandWidthDataDir /usr/local/apache/bandwidth
     
     # 대역폭 제한을 위한 알로리즘 
     BandWidthPulse 1000000

     # BandWidth (도메인|IP주소|all) 속도(byte)
     #BandWidth     all        0
     # 모든 접속에 2621440 Bytes/sec (20Mbps)로 제한을 한다.
     BandWidth     all   2621440

     # 20Mbps    = 2.5  MByte = 2,621,440 Byte
     # 18Mbps    = 2.25 MByte = 2,359,296 Byte
     # 16Mbps    = 2.0  MByte = 2,097,152 Byte
     # 10Mbps    = 1.25 MByte = 1,310,720 Byte

     # 만약 디렉토리별 설정시에는 아래와 같이 한다.
     # /home/test 디렉토리에 192.168.1.0와 foobar.net이라는 도메인을 가진 
     # 호스트에 대해서는 제한을 걸지않으며 그외의 접속에 대해서는 1024Bytes/sec으로 제한을 한다.
     #
     #<Directory /home/test>
     #  BandWidth 192.168.1 0
     #  BandWidth foobar.net 0
     #  BandWidth all 1024
     #</Directory>


     # LargeFileLimit는 파일의 사이즈에 따라 속도제한을 할수 있읍니다.
     # LargeFileLimit 파일크기(KByte) 속도(Bytes/second)
     # 20M이상의 파일을 다운받으면 속도를 512KB/sec로 제한합니다
     LargeFileLimit  20480  512000

     # 가능한 접속수를 제한합니다. 이 숫자가 되면 새로운 접속을 거부됩니다.
     # MaxConnection 500

     # 데이터의 전송속도의 최소값을 지정합니다.
     # 보통 설정된 대역폭/사용자수가 사용자별 최고속도가 되지만 MinBandWidth 속도이하로는
     # 속도가 줄어들지 않읍니다.
     
     # 만약 -1로 설정되면 모든 세션에 대해 최고속도는 BandWidth나 LargeFileLimit에서 
     # 지정한 속도가 나오게 됩니다.
     # MinBandWidth (도메인|IP주소|all) 속도(KB/sec)
     MinBandWidth all 409600
   </IfModule>

   -------------------------------------------------------------------

보통 특정 디렉토리나 도메인의 최고속도를 지정하거나 고용량의 파일을 다운로드시의
트래픽을 제어할때 가장 유용하게 쓰일 수 있습니다.

앞서 다루었던 mod_throttle와 mod_bandwidth 두개의 모듈을 같이 적절히 사용한다면
훨씬 효율적인 네트워크 관리과 호스팅 관리가 될 것입니다.