Server & OS

아파치 트래픽 제어하기 mod_throttle

페이지 정보

본문

웹호스팅 사이트를 돌아다니다보면
" 일일트래픽 500M , 혹은 일일 히트수 1000 히트 제한 "
이런 글을 볼 수 있습니다.


트래픽을 제어하는 방법은 mod_bandwidth 와 mod_throttle 두가지가 주로 많이 쓰이는데
mod_bandwidth 는 대역폭을 관리 하는 모듈이며
mod_throttle 은 트래픽을 제어하는 모듈입니다  ( 그게 그 소리 같은가 ? ㅡㅡ;;  하지만 두개의
역할은 분명히 다릅니다 )

예를들어 1M 짜리 파일을 받는다고 하면
mod_bandwidth 모듈을 이용하면 초당 얼마의 속도까지 전송이 가능한지를 관리 하고
mod_throttle 모듈은 1M 파일을 몇번까지 다운받을 수 있느냐를 관리 하게 되겠죠.

mod_bandwidth 모듈은 1M 파일을 다운 받는 속도를 apache 서버 관리자가 마음대로
조절할 수 있으나 다운 받는 횟수, 다시말해 총 다운로드 양은 조절이 안되고

mod_throttle 모듈은 1M 파일을 다운받는 속도를 조절할 수 없으나
다운받는 총 횟수, 즉 총 다운로드 양을 조절할 수 있다는 말입니다.

두개를 함께 쓰면 트래픽, 대역폭 관리에 유용하겠죠.


이번 강좌에서는 mod_throttle 모듈만 설명 하겠습니다.
아파치가 설치된 디렉토리는 /usr/local/apache 라고 가정하고 설명 합니다.

우선 mod_throtte.c 파일을 다운받아  아파치 경로의 특정 디렉토리로 가져다 놓습니다.

이걸 구할 수 있는곳은

http://www.snert.com/Software/mod_throttle/index.shtml

위 웹사이트입니다.

mod_throttle312.tgz 파일을 다운 받을 수 있네요 ( 2003년 10월 25일 현재 )
다운받아 압축을 풀면 여러개의 파일이 나오는데 그 중에서
mod_throttle.c 파일을  /usr/local/apache/src/module/extra 에 가져다 놓습니다.


그리고 아파치를 컴파일을 다시 하는데
아래와 같은 컴파일 옵션을 줘야 합니다.

[root@myserver /]# cd /usr/local/apache
[root@myserver apache]# ./configure --prefix=/usr/local/apache \\
--activate-module=src/modules/php4/libphp4.a \\
--add-module=src/modules/extra/mod_throttle.c


( 여기서 \\  표시는 줄이 바뀌며 라인이 지저분해 지는것을 방지 하기 위해
줄을 넘기면서 명령어를 계속해서 입력하기 위해 사용한 표시입니다 )


기존의 php 연동 옵션 (activate... ) 아래에 모듈을 함께 컴파일 하는것으로 옵션을 주었습니다.

이제 make  그리고 make install 로 컴파일을 합니다. ( 이 부분은 아래글 apache ,PHP 설치하기를
참조하시길 바랍니다 )


컴파일이 완료 되었으면 모듈이 제대로 추가 되었는지 확인해 봅니다.

[root@myserver apache]# /usr/local/apache/bin/httpd -l
Compiled-in modules:
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_access.c
  mod_auth.c
  mod_setenvif.c
  mod_php4.c
  mod_throttle.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec


맨 아래쪽에 mod_throttle.c 라는 모듈이 보입니다.
제대로 컴파일이 된 상태입니다.

이제 모듈을 사용해 보겠습니다.

httpd.conf 파일을 열어서 <ifmodule> 이 있는 위치로 이동합니다.
( 꼭 거기에다 편집할 필요는 없지만 .. 같은 내용은 몰아 넣는것이 관리하기 좋겠죠 )

아래의 내용을 입력합니다.


<IfModule mod_throttle.c>
        ThrottlePolicy none

        <Location /throttle-status>
        SetHandler throttle-status
        Deny from all                  // 다른접근을 모두 거부하고
        Allow from  123.123.123.123    // 특정 아이피에서만 throttle-status 를 확인 하도록
        </Location>

        <Location /throttle-me>
        SetHandler throttle-me
        </Location>

        <Location /~*/throttle-me>
        Order deny,allow
        Deny from all
        Allow from all
        SetHandler throttle-me
        </Location>
</IfModule>


throttle-status 를 확인할 수 있는 아이피를 정해 놓은 부분(Allow from.. )을 주의 하시길 바랍니다.
아무나 서버 상태를 확인하게 하면 좇치 않겠지요 ? ㅋㅋ
위 설정은 123.123.123.123 에서만 서버 전체의 트래픽 상황을 모니터링 하도록 설정한 것입니다.


virtualhost 에서의 설정은 아래와 같습니다.

<VirtualHost 123.123.123.123>
    ServerAdmin  dream@praise.co.kr
    DocumentRoot /home/dream/public_html
    ServerName  myserver.co.kr
    ServerAlias  www.myserver.co.kr
    Throttle Policy Volume 1024M 1d          //  1일 1G 제한
    ThrottlePolicy Request 1000 1d          // 하루 히트수 1000회 제한
    ErrorLog  /var/log/httpd/error_log
    CustomLog  /var/log/httpd/access_log common
</VirtualHost>


위의 내용대로
서버에서 운영되는 도메인에 대해 throttlepolicy 를 설정한 뒤
아파치를 재시작 하고

http://서버IP/throttle-status 를 확인 하면
서버에 설정된 대역폭의 모든 내용을 확인 할 수 있으며

서버에 설정된 특정 도메인의 트래픽을 확인 하려면
http://domain/throttle-me 를 확인 하면 됩니다.

-----------------------------------------------------------------------
자료출처 : 진우네집 ( http://www.praise.co.kr )
-----------------------------------------------------------------------

관련자료

등록된 댓글이 없습니다.
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)