사이트 내 전체검색
[linux] mod_throttle
로빈아빠
https://cmd.kr/server/445 URL이 복사되었습니다.

본문

mod_throttle 

아파치 웹서버에서 전송량 등을 제한하는 mod_throttle에 대한 이야기입니다.
http://snert.com/Software/mod_throttle/index.shtml

DSO module로 설치하는 방법입니다.

1. 소스 다운로드
http://snert.com/Software/mod_throttle/mod_throttle312.tgz

2. 압축풀기
# tar zxvf mod_throttle321.tgz

3. Makefile 수정
apxs, apachectl이 있는 위치를 지정합니다.
# cd mod_throttle-3.1.2
# vi Makefile
APXS=/usr/local/apache/bin/apxs
APACHECTL=/usr/local/apache/bin/apachectl

4. 컴파일만 하세요.
# make all

5.모듈 설치
생성된 mod_throttle.so 을 아파치의 모듈집합소로 보냅니다.
# cp mod_throttle.so /usr/local/apache/libexec

6. httpd.conf 설정

# vi httpd.conf

LoadModule throttle_module    libexec/mod_throttle.so
AddModule mod_throttle.c

<IfModule mod_throttle.c>
ThrottlePolicy none

<Location /throttle-status>
SetHandler throttle-status
</Location>

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

<Location /~*/throttle-me>
SetHandler throttle-me
</Location>
</IfModule>

위의 내용을 적당한 곳에 추가합니다.
그리고, 버츄얼호스팅을 하는 경우 아래와 같이 설정합니다.
일일전송량을 1GB로 제한하고자 한다면,
<VirtualHost *>
    ServerAdmin root@localhost
    DocumentRoot /usr/local/apache/htdocs
    ServerName throttle.jib.to
    ErrorLog /usr/local/apache/logs/error_log
    CustomLog /usr/local/apache/logs/access_log combined
ThrottlePolicy Volume 1G 1d
</VirtualHost>

자세한 설정 옵션 등은 아래 문서를 참조하세요.
http://snert.com/Software/mod_throttle/index.shtml

7. 아파치를 재시작하면 logs/mod_throttle.runtime 파일이 생성되면서 각 도메인에 대한 웹전송량 통제가 시작됩니다.

8. 모니터링

웹브라우저에서 http://대표도메인/throttle_status로
전체 도메인의 대한 hits, 전송량 등을 한 눈에 파악할 수 있으며, http://각도메인/throttle_me 로 한 도메인에 대해서만 전송량 정보를 모니터링할 수 있습니다.

주의사항 : 모니터링을 위해선 대표도메인의 DocumentRoot 는 nobody가 읽을 수 있는 권한이 있어야 합니다.

//////////////////////////////////////////////////////////////////////////
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 를 확인 하면 됩니다.


여기서부턴 설정옵션에 관한 개발자의 manual 페이지를 약간 풀어본 것이다.


## 사용자별 트래픽 모니터링 하기 위한 모듈을 로드한다. (접속자 많을때는 하지말것)
LoadModule throttle_module libexec/mod_throttle.so

#예) 전체 설정을 1일 300G 로 한다면, 아래와같다.
#ThrottlePolicy Volume 300G 1d // 1일 300 M 로 제한

# 전체적인 상황을 보는 페이지

Order deny,allow
Deny from all
## 특정 ip만 열어준다.
Allow from 피씨아이피
SetHandler throttle-status


## 사용자 자신의 접속량 점검

SetHandler throttle-me


SetHandler throttle-me

## 통계결과를 3초에 한번씩 갱신하여 보여준다.((기본은 60)
ThrottleRefresh 10
## 접속하는 ip들을 1000개 까지 보여주면 통계를 구하기 위해 제한을 두지 않았다.
ThrottleClientIP 1000 none
## 아이피/~doly 으로 접속을 10초에 10번으로 제한하였다.
ThrottleUser doly Request 10 10


## 정책들
None : 아무 정책이 없고, 단지 모니터링 용도로 사용할때 사용
Concurrent : 동시접속수를 제한하기위한 것인데.. 별루당
(ThrottleClientIP, ThrottleRemoteUser와 같이 쓸수 없다.)
Document 요청제한수 기간 : Request와 비슷 단, html 형식의 문서만 카운트 한다.(그림파일 제외)
Idle 쉬는시간 기간 : 요청간에 쉬는 시간을 준다?? 왜??? <-- 이건 더 이해 해야 함.
Random 받아들이퍼센트 기간: 0이면 모두 거절, 100 이면 모두 허가, 중간갑이면 랜덤하게 허가^^;
Request 요청제한수 기간: 기간동안 받아들일 요청수 ^^;
Speed 제한용량 기간 : Volume 하고 비슷하지만, 요청을 거절하지 않고 연기(delay)시킨다.
Volume 제한용량 기간 : 기간동안 제한용량만큼을 준다.

## 항목들
SetHandler throttle-status : throttle의 상태를 보여준다.(관리자 모드)
Context : server,,,

SetHandler throttle-me : throttle의 자기 상태를 보여준다.(사용자 모드)
Context : server,,,

** ClinetIP별로 제한을 하기 위함((괜찮은 설정))
ThrottleClientIP 보여줄ip수 정책 제한 기간
Context : server
보여줄ip는 : 접속한 ip리스트 들이다.
정책 : 위 정책들중의 하나를 선택하면 된다.^^ 제한,기간 위 정책에 따른다.

** 통계를 출력할 형태.(별의미 없다.)
ThrottleContentType 문자열
Context : server
문자열 : text/html, text/plain 이 둘중에 하나 넣으면 된다.

** 결과에 색을 달리할 퍼센테이지를 정한다. (별 의미 없다.)
Context : server
ThrottleIndicator green 50
ThrottleIndicator yellow 75
ThrottleIndicator red 90

** throttle 에서 사용하는 파일들 (( 별 의미 없다.))
Context : server
ThrottleLockFile /usr/local/apache/logs/throttle.lock
ThrottleRuntimeFile /usr/local/apache/logs/throttle.runtime

** Throttle 의 최대 Delay 시간 (기본 :60초, 0:제한하지 않음)
Context : server
ThrottleMaxDelay 60

** Throttle 정책 설정 (가장 많이 사용 )
Context : server,,,
ThrottlePolicy 정책 제한 기간
가장 많이 사용한다. 정책은 Volume 관 Request 를 많이 사용해서 제한 한다.

** Throttle 통계화면 리로드 시간(기본 60초)
Context : server
ThrottleRefresh 초단위시간

** Throttle RemoteUser ?? <== 이놈은 뭐에 쓰는 놈인지??
Context : server
ThrottleRemoteUser 크기 정책 제한 기간


** 로컬사용자 제한 등록하기 (( 실 계정 사용자만 등록된다.)
Context : server
ThrottleUser 사용자 정책 제한 기간


(4) 통계보는방법
http://아이피/throttle-status : 관리자 모드
http://도메인/throttle-me : 일반 사용자가 보는 통계 페이지
http://아이피/~아이디/throttle-me

댓글목록

등록된 댓글이 없습니다.

1,139 (10/23P)

Search

Copyright © Cmd 명령어 3.147.47.177