Apache에서 트래픽을 제어하는 방법으로 mod_throttle과 mod_bandwidth가 있읍니다.
mod_throttle는 파일전송의 횟수나 양을 실시간으로 제어하는 것으로 초/분/시/일/주/로
최대 전송량/전송횟수등을 지정할 수 있습니다.
mod_bandwidth는 파일전송의 대역폭을 실시간으로 제어하는 것으로 최대전송속도,
최소전송속도 파일사이즈 범위별 전송속도등을 지정할 수 있읍니다.
예를 들어 특정사이트의 일일 최대 전송량을 5G로 제한하고 싶으면 mod_throttle로
특정사이트의 최대 전송속도를 5Mbps로 제한하고 싶으면 mod_bandwidth로 설정할 수 있습니다.
먼저 웹호스팅 업체에서 트래픽 제어를 위해 많이 사용하고 있는 mod_throttle 부터
설정해보도록 하겠습니다.
1. 다운로드
http://www.snert.com/Software/mod_throttle/
http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
2. 설치
먼저 소스를 /usr/local/src에 압축해제하고, 아파치 웹서버의 설치하는 방식에 따라
2가지 방법으로 설치합니다.
– 아파치 웹서버를 STATIC으로 설치시
mod_throttle.c 소스를 아파치 소스 모듈 디렉토리로 복사
# cp /usr/local/src/mod_throttle-3.1/mod_throttle.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_throttle.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_throttle.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
– 아파치 웹서버를 DSO로 설치시
$ cd /usr/local/src/mod_throttle-3.1/
$ /usr/local/apache/bin/apxs -i -a -c mod_throttle.c
설치확인은 libexec 디렉토리에서 mod_throttle.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 throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
#################################-
아파치 기본설정 파일(httpd.conf)에서 mod_throttle를 사용할 수 있도록 기본설정을 합니다.
관리자 모드는 특정아이피(123.123.123.123)에서 접근만을 허용하며
/xxx/xxx/.htpasswd에 만들어진 아이디와 비밀번호를 사용하여 웹인증을 합니다.
#################################- <IfModule mod_throttle.c> # 관리자 모드 설정 <Location /throttle-status> SetHandler throttle-status Order deny,allow Deny from all # 허용하는 아이피주소 Allow from 123.123.123.123 # 이 페이지에 httpd 인증을 추가 AuthName "throttle-startus auth" AuthType Basic AuthUserFile /xxx/xxx/.htpasswd AuthGroupFile /dev/null require user admin master </Location> # 사용자 모드 설정
<Location /throttle-me>
SetHandler throttle-me
Order deny,allow
Deny from all
Allow from all
</Location>
</IfModule>
#################################-
이제 아파치를 재구동하고 관리자 모드와 사용자모드를 웹브라우저에서 확인합니다.
http://www.mydomain.com/throttle-status
http://www.mydomain.com/throttle-me
이제 도메인별 트래픽등의 할당량과 사용량을 실시간으로 보여주는 페이지를 볼 수 있읍니다.
4. 도메인별 트래픽 제어 설정
각각의 도메인마다 트래픽을 용량, 전송회수등으로 제어하는 설정을 하도록 하겠읍니다.
아래의 예제는 httpd.conf내의 virtualhost 부분입니다.
www.domain.com이라는 도메인의 일일 트래픽 전송량을 5000M로 제한하는 설정입니다.
#################################-
<VirtualHost 211.174.180.47>
# 일일 5000M 설정 (K/M/G 사용)
ThrottlePolicy Volume 5000M 1d
ServerAdmin root@www.domain.com
DocumentRoot /home/domain
ServerName domain.com
ServerAlias www.domain.com
CustomLog logs/domain.com_log
ErrorLog logs/domain.com_error_log
</VirtualHost>
#################################-
5. 트래픽 초기화
– 트래픽 초과로 인한 초기화
트래픽을 제한하여 사용하다 보면 트래픽 초과로 인한 사이트 차단으로 서비스가 되지
않는 경우가 발생합니다.
이때는 트래픽을 초기화하여 정상적으로 서비스 될 수 있도록 처리해야합니다.
초기화 하는 방법은 http://사이트도메인/throttle-status 페이지에 가면
도메인별로 통계를 볼 수 있습니다.
각 도메인의 좌측에 번호를 클릭하면 해당 도메인의 설정이 초기화 됩니다.
– 트개픽 측정주기별 초기화
위의 설정 ThrottlePolicy Volume 5000M 1d 와 같이 1일 기준으로 설정되었으면
매일 특정시간에 전체트래픽이 누적계산 되지않도록 전체를 초기화 해주어야 됩니다.
초기화 하는 방법은 http://사이트도메인/throttle-status 페이지에 가면
좌측상단에 “Reset All”을 클릭하도록 합니다.
보통 이 작업은 매일 자정에 하는 경우가 많으며 수동으로 할수가 없기때문에
cron을 활용하여 자동으로 초기화 하도록 합니다.
자동 초기화에 대한 내용은 cron에 대한 내용을 다룰때 같이 설명하도록 하겠습니다.
트래픽 초과로 인한 사이트 차단이 되었을때 그에 따른 간단한 안내 메시지나 설명을 위한
에러페이지를 제작할 필요가 있으며,이를 위해 ErrorDocument 설정을 활용하시기 바랍니다
출처 : http://phpleader.net/bbs/view.php?&ss[fc]=7&bbs_id=php_07&page=5&doc_num=88
Be First to Comment