DigiMoon 맘대로 닦고 조이고 기름치는 재미가 있는 DigiMoon만의 기억 저장소

Posted
Filed under 컴퓨터 탐구/리눅스
 아파치 2.x 버전에서 사용하는 트래픽관리 모듈 mod_cband에서 일일 단위로 트래픽 통계를 리셋하려면 버추얼호스트 설정에서 아래 옵션을 추가하죠. 붉은색으로 표시한 부분입니다.

<VirtualHost *>
    DocumentRoot /home/aaa/www
    ServerName www.aaa.digimoon.net
    ServerAlias aaa.digimoon.net
    ErrorLog /var/log/vhost/aaa/error_log
    CustomLog /var/log/vhost/aaa/access_log cnxlog
    CBandLimit 10000Mi
    CBandPeriod 1D
</VirtualHost>

 그러나 mod_cband 자체 버그인지는 몰라도 각 계정별로 설정한 버추얼호스트 리스트가 다수이거나 각각 설정해 둔 트래픽 리셋 주기가 제각각일 경우 그냥 내버려 두면 하루가 지나도 이틀이 지나도 자동 리셋이 안 되어 있더군요. KLDPphpschool에서도 답을 구할 수가 없어서 궁리를 한 끝에 짜낸 방법입니다.


 httpd.conf 파일에 mod_cband 환경설정은 통상 아래와 같이 합니다.
<IfModule mod_cband.c>
<Location /cband-status>
    SetHandler cband-status
    Order deny,allow
    Deny from all
    Allow from 11.11.11.11
</Location>
<Location /cband-status-me>
    SetHandler cband-status-me
    Order deny,allow
    Deny from all
    Allow from all
</Location>
</IfModule>
※ <Location /cband-status>, <Location /cband-status-me> 옵션 부분은 자신이 원하는 대로 설정을 변경해서 사용해도 됩니다. <Location /traffic>, <Location /traffic-me>로 변경해 주면 트래픽 리셋 페이지에 http://도메인/cband-status 가 아닌 http://도메인/traffic 으로 접속하면 됩니다.
 
 위 설정에 의하면 계정 전체 트래픽을 제어할 수 있는 관리페이지에 접근할 수 있는 IP는 11.11.11.11입니다.
아무 클라이언트나 접속하게 두면 트래픽 리셋 버튼을 아무나 누를 수 있기 때문에 특정 IP만 접근할 수 있도록 설정하죠.
 관리자페이지를 보면 reset all 이란 버튼이 있습니다. 이걸 직접 클릭해서 계정 전체의 트래픽을 리셋할 수 있습니다. 아파치 버추얼호스트 설정에 추가한 옵션으로 자동 리셋이 되지 않는 문제를 주기적으로 이 reset all 버튼을 직접 누르게끔 해서 해결할 수 있습니다.

 reset all 버튼에 마우스 우클릭을 하여 나오는 속성에서 URL를 확인할 수 있습니다. wget 커맨드 뒤에 이 URL을 입력하여 엔터 치면 웹상에서 reset all 버튼을 누르는 것과 같은 효과를 낼 수 있습니다.

사용자 삽입 이미지

  제 서버의 reset all 버튼 URL은 위와 같습니다. http://www.digimoon.net/traffic?reset=all 까지만 복사해서 사용하면 됩니다.
 [reset all 버튼의 URL]

  텍스트 웹브라우저의 하나인 lynx를 이용하는 방법도 있습니다. 사용법은 아래와 같습니다.
/usr/bin/lynx --source [reset all 버튼의 URL]

 lynx 패키지는 CenOS 5.x의 경우 yum으로 간단하게 설치할 수 있습니다.
# yum -y install lynx


 wget을 이용하는 방법과 lynx를 이용하는 방법 둘 중에 하나를 골라 cron에 매일 00시 00분에 실행되도록 해서 사용하면 됩니다.
00 00 * * * root /usr/bin/lynx --source [reset all 버튼의 URL]




지금까지 설명한 내용은 트래픽 리셋 페이지를 특정 IP에서만 접근 가능케 설정하는 경우였습니다. 이 경우 클라이언트의 IP가 바뀔 때마다 일일이 터미널로 서버에 접속해서 아파치 설정을 변경해 주어야 하는 불편함이 따르게 되죠. 그래서 .htaccess 파일을 이용한 아파치 인증 방식을 도입하면 좀 더 편리하게 관리할 수 있습니다.

아래와 같이 cband 설정을 변경합니다.
<IfModule mod_cband.c>
<Location /cband-status>
   SetHandler cband-status
   AuthName "트래픽 관리 페이지"
   AuthType Basic
   AuthUserFile /home/digimoon/www/cband-status/.htpasswd
   require valid-user
</Location>
<Location /cband-status-me>
etHandler cband-status-me
   Order deny,allow
   Deny from all
   Allow from all
</Location>
</IfModule>

아파치 인증을 위한 .htaccess, .htpasswd 파일을 생성하여 cband 설정의 AuthUserFile 옵션에 정의해 둔 경로에 넣어두고 아파치 리스타트하면 적용됩니다. 아파치 인증에 관한 자료는 인터넷 검색으로 각자 해결하시고... ^^

그리고 lynx 커맨드에 아래와 같이 인증 옵션을 추가해서 실행하면 됩니다.
/usr/bin/lynx -auth=ID:패스워드 --source [reset all 버튼의 URL]
Creative Commons License
2008/09/25 14:56 2008/09/25 14:56