2007년 4월 3일 화요일

트래픽 제한 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
    ThrottlePolicy 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 를 확인 하면 됩니다.


☞tip

mod_throttle 정해진 시간에 전체 reset하기
1. 서버 아이피
    111.111.111.111 라고 가정

2. 스크립트 소스
    wget http://111.111.111.111/throttle-status?command=reset,*

라고 하시면 됩니다.


* 트래픽 페이지 보는방법
% : 일일 허용 트래픽의 현재까지 사용량을 퍼센테이지로 나타낸 것입니다.
      퍼센테이지 숫자가 “70” 이상일 때 글자색이 초록색에서 오렌지색으로 변경됩니다.
      퍼센테이지 숫자가 “90” 이상일 때 글자색이 오렌지에서 빨간색으로 변경됩니다.

Hits : 인터넷 사용자가 웹서버의 파일 하나에 접속하는 것을 뜻하며, 웹페이지를 구성하는
      html, script, image파일, download파일들이 모두 히트수에 해당됩니다.

Refused : 일일 허용 트래픽을 다 사용하여 페이지가 막힌 후부터의 거절된 요청수입니다.

Kbytes sent : 이 수치는 방문자가 홈페이지에서 다운로드 된 (웹브라우저에 보여지는 모든
     그림들과 글들이 접속자에게는 다운로드 개념으로 사용됩니다.)용량입니다. 이 용량이 Limit
     항목의 수치를(Mbyte 단위) 넘어서게 되면 트래픽을 초과하였다는 안내페이지가 나오면서
     24시간동안 사용할 수 없게 됩니다. 그리고, Kbyte단위이기 때문에 수치상 10000이라고 나
     오면 10Mbyte를 사용했다는 것입니다.
Kbytes per hit : Kbytes sent 수치를 Hits 수치로 나눈 수치를 표시합니다.

Policy : 이것은 트래픽 제한을 어떤 방법으로 하겠냐는 정책을 정하는 것인데, 인텔네트의

Volume은 “Kbytes sent”를 기준으로 제한하겠다는 것입니다.

Limit : 제한 트래픽 수치를 Mega byte로 표시하므로 뒤에 “M”이라고 붙습니다.
      이외에도 K(kilo byte), G(giga byte)등이 있습니다.

Period : 트래픽을 수집하는 기간을 나타냅니다. 사용되는 단위는 s, m, h, d, w가 있는데
      이는 각각 seconds, minutes, hours, days, weekends이지요. 인텔네트는 일일간의 트래픽
      으로 제한을 두기 때문에 “1d”라는 표시가 됩니다.

Period Elapsed : 제한 기간(Period)를 시간화 한 것입니다.
      이 수치가 23:59:59가 되면 00:00:00으로 리프레쉬되어 다시 카운팅 되는데요, 만약에 운
      영중에 트래픽이 한번도 제한되지 않을 경우 앞에 수치가 더 붙습니다.
      트래픽 제한 걸리신 분들은 이 수치가 24:00:00이 될 때까지 기다리시면 다시 리프레쉬
     되어 사이트가 열립니다.
     (예를 들면 허용 트래픽이 넘어서 확인하는 데 이 수치가 22:00:00 이면 2시간만
     기다리시면 되는 겁니다.)

Idle Time : 한 접속자가 웹 사이트를 방문한 후 다른 방문자가 생길 때까지의 경과 기간을
    수치로 표시한 것입니다.
    방문자가 많으면 많을수록 이 수치는 작아집니다.

====================================

트래픽 표시기 (MOD-THROTTLE v3.1.2 기준) 입니다...

 

(호스팅 업체가 MOD-THROTTLE v3.1.2 를 지원하는지 알아보는 방법은 뭐 여러가지가 있겠지만,

일반적으로 자신의 사이트명 뒤에 /throttle-me 를 붙여보면 됩니다...

트래픽 표시가 나오고.. 아래부분에 버전이 나옵니다)

 

첨부파일을 받아서 압축을 푸시면, 파일이 네개가 나옵니다...

 

1) get_mod_throttle_3_1_2.php -- 수정 불필요

 

2) index.html -- 실제 표시할 내용을 가지고 있는 파일 (수정 필요)

 

3) traffic_yes.gif -- 그림 파일

 

4) traffic_no.gif -- 그림 파일

 

작업 #1

 

index.html 을 불러들이면 아래처럼 생겼습니다...


빨간색으로 표시된 부분을, 수정해 주셔야 합니다.


서버주소 (순수 서버이름만) / throttle-me 페이지 이름 (일반적으로는 그대로 throttle-me 입니다)

 

<?
include "get_mod_throttle_3_1_2.php";
get_mod_throttle_3_1_2("dsrdan.com","/throttle-me",$Per,$MB,$TotMB);
?>


<!-- TEXT Output : 원하시는 대로 수정하세요 -->
<center>
   <font name=Tahoma style="font-size:8pt">Traffic=<?=$Per?>% (<?=$MB?>MB/<?=$TotMB?>MB)<BR></font>
</center>


<!-- GRAPHIC Output : 원하시는 대로 수정하세요 :: 현재 이미지 사이즈 = 150 * 5 -->
<center>  
   <table width=150 height=5 border=0 cellspacing=0 cellpadding=0>
      <tr title='<?="현재 트래픽 : ".$Per."% (".$MB."MB/".$TotMB."MB)"?>'>
         <td background=traffic_yes.gif align=top width=<?=$Per?>%></td>   
         <td background=traffic_no.gif  align=top width=<?=100-$Per?>%></td>
      </tr>
   </table>
</center>


수정이 되었으면,

 

이 네개의 파일을 일단, 웹에 올려주세요...

 

(예를 들어 여기서는 abc 라는 디렉토리라고 가정)

 

그리고 나서 제대로 되는지 먼저 테스트를 해봐야 겠죠?

 

http://자기사이트명/abc/ 로 접속을 해서 트래픽 표시가 제대로 되는지 점검해 보세요...

 

제대로 나온다면 진행...

 

작업 #2

 

이제 작업은 거의 끝난거죠...

 

다음 할일은, 트래픽 표시를 원하는 위치에 이 내용을 불러다 써주는 일인데요...

 

위에 수정했던 index.html 의 내용 전체를 블럭복사를 해 둡니다 (클립보드)

 

그리고 표시를 원하는 파일(html 기준) 에 넣어주면 되는데 (붙여넣기),

 

보통의 html 작업처럼, 주의해야 하는 부분이 있습니다...

 

위의 index.html 내용중 보라색으로 표시된 부분 있죠?

 

그 부분은 디렉토리를 참조하기 때문에, 주의하셔서 수정하셔야 됩니다...

 

(그 수정법은 호스팅 업체마다 다르고, 자신의 사이트 디렉토리구조에 따라 다르겠죠~)


그리고 표시를 원하는 양식대로 손보시고... 쓰시면 됩니다...


원리는 throttle-me 페이지의 내용중 일부분을 파싱해서,


텍스트 / 그래픽으로 표시해 주는 겁니다... (그러고 보면 별 내용이 아닌데... ㅎ)


도움 되시길 바라면서...


이만 총총....


추) 여러곳에서 테스트 해보지는 못했지만, cafe24 / realmind 두 곳은 지원되네요...

댓글 없음:

댓글 쓰기