아파치 1.x 에서의 트래픽 제한 :: 리눅스일반[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

리눅스일반
[1]
등록일:2008-04-01 22:41:32 (0%)
작성자:
제목:아파치 1.x 에서의 트래픽 제한
글쓴이: 티니 (2007년 01월 10일 오후 04:59) 읽은수: 1,098

--------------------------------------------------------------------------------------
- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]
- 작성일 : 2007-01-10
- 사이트 : http://linux.tini4u.net/
- 원제목 : 아파치 1.x 에서의 트래픽 제한
- 환 경 : CentOS 4.4, apache 1.3
- 키워드 : mod_throttle
--------------------------------------------------------------------------------------
이번 강좌는 아파치 1.x에서의 트래픽을 제한하는 모듈인 throttle에 대해서 다뤄보겠습니다.
이미 많은 분들이 아시겠지만 throttle은 각 호스트에 대한 트래픽을 다양하게 제한할 수 있는
모듈입니다.

throttle 모듈은 아파치 3rd party(Third-party) 모듈 이기 때문에, 아파치의 설치 방법에 따라서
그 설치법 또한 달라지게 되어 있습니다.
이곳 LTN의 웹서버 게시판에 보시면 아파치는 DSO와 Static 의 방식으로 운영될 수 있다는것을
확인하실 수 있을 것입니다.

1. mod_throttle 다운로드
이 강좌를 쓰는 시점인 2007년 01월 10일에는 현재 공식 개발사의 홈페이지를 가보게 되면
더이상 배포를 하지 않고 close 되었다는 문구를 보실 수 있습니다.
따라서 필자가 한글화 한 throttle 모듈의 소스를 필자의 개인 패키지미러에 올려두도록 하겠습니다.
테이블로 깔끔하게 정리해놨으니 기존의 throttle 모듈보다 보기 편하실 겁니다.
[root@localhost]# wget http://pkg.tini4u.net/http/3rd-party/mod_throttle.tar.gz
[root@localhost]# tar xfz mod_throttle.tar.gz


2. 아파치를 Static 으로 사용할 경우
아파치를 정적으로 빌드하여 운영할 경우에는 필요한 모듈을 미리 메모리에 적재해야 되기 때문에
아파치를 설치하기 전에 throttle 모듈도 같이 빌드를 해줘야 합니다.
빌드하는 방법은 아파치의 --add-module 옵션을 이용하시면 됩니다.
[root@localhost]# cd apache-1.3.37
[root@localhost]# ./configure --add-module=../mod_throttle/mod_throttle.c


3. 아파치를 DSO 로 사용할 경우
아파치를 동적으로 빌드하여 운영할 경우에는 이미 so 모듈이 enabled 되어 있을 것입니다.
확인 방법은 httpd -l 을 했을 경우에 mod_so.c 가 출력이 되면 됩니다.
만약 출력이 되지 않는 경우 so 모듈을 따로 올려주셔야 됩니다.
[root@localhost]# cd mod_throttle
[root@localhost]# make install

아파치를 DSO로 운영하면 apxs를 사용할 수 있기 때문에 설치 방법또한 간단합니다.
만약에 make install로 설치가 안되시는 분은 직접 apxs를 이용해서 설치할 수도 있습니다.
[root@localhost]# /usr/sbin/apxs -aic mod_throttle.c


4. 아파치 환경설정에서의 throttle 설정
앞서 말했듯이 throttle은 아파치의 3rd-party 모듈이기 때문에 아파치 위에서 작동을 합니다.
따라서 설정 또한 아파치 환경설정 파일인 httpd.conf에서 해주게 됩니다.
  1. [root@localhost]# vi /etc/httpd/conf/httpd.conf
  2. <IfModule mod_throttle.c>
  3. ThrottlePolicy none
  4.     <Location /throttle-status>
  5.         SetHandler throttle-status
  6.         Order deny,allow
  7.         Deny from all
  8.         Allow from 127.0.0.1 100.100.100.100
  9.     </Location>

  10.     <Location /throttle-me>
  11.         SetHandler throttle-me
  12.         Order deny,allow
  13.         Deny from all
  14.         Allow from all
  15.     </Location>

  16.     <Location /~*/throttle-me>
  17.         SetHandler throttle-me
  18.         Order deny,allow
  19.         Deny from all
  20.         Allow from all
  21.     </Location>
  22. </IfModule>

※ SetHandler 설명
throttle-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
throttle-me -> 사용자 페이지 입니다.

5. throttle 적용
throttle은 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 ThrottlePolicy 를 사용한 예제 입니다.
여러가지 지시자와 정책에 대한 설명은 다음 섹션에서 설명하도록 하겠습니다.
  1. <VirtualHost 192.168.0.1>
  2.     ServerName foobar.com
  3.     ServerAlias www.foobar.com
  4.     DocumentRoot /home/foobar/public_html
  5.     ErrorLog logs/foobar-err
  6.     CustomLog logs/foobar-acc combined
  7.     ThrottlePolicy Volume 100M 1d
  8. </VirtualHost>

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

6. throttle 정책
  1. None: 아무런 정책이 없음. 주로 모니터링 용도로 사용
  2. Concurrent: 동시 접속수 제한. ThrottleClientIP, ThrottleRemoteUser와 같이 사용가능
  3. Document [제한수] [기간]: Request와 비슷하지만 html 문서를 카운트 시킬 수 있음
  4. Idle [시간] [기간]: 쉬는 시간.
  5. Random [NN%] [기간]: 0이면 모두 거절, 100이면 모두 허가, 그 외에는 랜덤하게 허가됨.
  6. Request [제한수] [기간]: 받아드릴 요청 수
  7. Speed [제한용량] [기간]: Volume과 비슷하지만 요청을 거절하지는 않고 연기(Delay) 시킴
  8. Volume [제한용량] [기간]: 해당 기간동안 제한시키며, 가장 많이 사용됩니다.


7. throttle 지시자
이름: ThrottleClientIP
설명: 접속한 IP를 설정해주면 됩니다.
문법: ThrottleClientIP [보여줄 IP수] [정책] [제한] [기간]

이름: ThrottleContentType
설명: 통계를 출력할 형태를 지정하면 되며, text/html, text/plain 중에 하나를 넣으면 됩니다.
문법: ThrottleContentType [문자열]

이름: ThrottleIndicator
설명: 결과에 따른 컬러를 조정할 수 있는 퍼센테이지와 컬러를 지정합니다.
문법: ThrottleIndicator [컬러] [NN%]
예제: ThrottleIndicator green 60
    ThrottleIndicator yellow 80
    ThrottleIndicator red 90

이름: ThrottleLockFile
이름: ThrottleRuntimeFile
설명: throttle에서 사용하는 파일을 강제로 지정해줄 수 있습니다.
문법: ThrottleLockFile [파일명]
문법: ThrottleRuntimeFile [파일명]

이름: ThrottleMaxDelay
설명: throttle의 최대 Delay 시간을 정합니다. 기본은 60초이며, 0은 제한하지 않겠다는 뜻입니다.
문법: ThrottleMaxDelay [N/sec]
예제: ThrottleMaxDelay 60

이름: ThrottlePolicy
설명: 일반적으로 정책은 Volume과 Request를 사용합니다.
문법: ThrottlePolicy [정책] [제한] [기간]
예제: ThrottlePolicy Volume 100M 1d

이름: ThrottleRefresh
설명: throttle 통계화면의 리로드 시간을 정합니다.
문법: ThrottleRefresh [N/sec]
예제: ThrottleRefresh 60

이름: ThrottleRemoteUser
설명: 접속자당 제한을 하는 지시자 입니다.
문법: ThrottleRemoteUser [크기] [정책] [제한] [기간]

이름: ThrottleUser
설명: 로컬 사용자 제한을 등록합니다. 분산된 호스트를 관리할 때 사용합니다.
문법: ThrottleUser [사용자] [정책] [제한] [기간]


8. 통계화면 보기
관리자모드 - http://foobar.com/throttle-status
사용자모드 - http://foobar.com/throttle-me
      - http://foobar.com/~foo/throttle-me

9. 통계화면에 아파치 인증 걸기
보통 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
  1. [root@localhost]# vi /etc/httpd/conf/httpd.conf
  2. <IfModule mod_throttle.c>
  3. ThrottlePolicy none
  4.     <Location /throttle-status>
  5.         SetHandler throttle-status
  6.         AuthName "트래픽관리 페이지"
  7.         AuthType Basic
  8.         AuthUserFile /home/foobar/.htpasswd
  9.         require valid-user
  10.     </Location>

  11.     <Location /throttle-me>
  12.         SetHandler throttle-me
  13.         Order deny,allow
  14.         Deny from all
  15.         Allow from all
  16.     </Location>

  17.     <Location /~*/throttle-me>
  18.         SetHandler throttle-me
  19.         Order deny,allow
  20.         Deny from all
  21.         Allow from all
  22.     </Location>
  23. </IfModule>
  24. [root@localhost]# htpasswd -c /home/foobar/.htpasswd ID

출처 : http://linux.tini4u.net/stories.php?story=07/01/10/5993233&topic=4
[본문링크] 아파치 1.x 에서의 트래픽 제한
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=3472
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.