작성자: 기술지원부 김 삼 수
아파치1.X 버전에서 mod_throttle를 이용한 트래픽관리
mod_throttle 이란? Apache에서 개별홈페이지의 일hit수 제한 및 트래픽을 관리하기 위해 사용하는 모듈로서apache 1.x버전에서만 사용할 수 있으며 apache를 Dos방식과 Static방식 중 어느 방식으로 설치했느냐에 따라 적재방법 또한 다릅니다. DOS방식의 mod_throttle 모듈적재 및 설정 방법을 알아보도록 하겠습니다.
( 1 ) 다운로드
ftp://ftp.sir.co.kr/etc/ wget은 웹에서 자동적으로 파일을 받아오는데 사용되는 유틸리티이며 HTTP, HTTPS, FTP 프로토콜을 지원합니다.
리눅스 쉘 명령어
① mod_throttle-3.1.2.tgz 파일을 다운로드 합니다. [root@nextline bin]# wget ftp://ftp.sir.co.kr/etc/mod_throttle-3.1.2.tgz

( 2 ) 압축해제
[tar 명령어 옵션] tar 명령어는 파일을 묶거나 풀 때 사용되는 리눅스 명령어 입니다. c : tar 파일을 생성할 때(여러 개의 파일을 하나의 파일로 묶을 때) v : 묶을 때나 풀어줄 때 파일들의 내용을 자세하게 보려고 할 때. z : gzip과 관련하여 압축이나 해제를 한꺼번에 하려고 할 때 사용. x : 주어진 이름의 파일에 대하여 추출 사용법: tar [옵션] 파일명
리눅스 쉘 명령어
① 다운로드된mod_throttle-3.1.2.tgz파일의 압축을 해제 합니다. [root@nextline bin]# tar zxvf mod_throttle-3.1.2.tgz

( 3 ) 컴파일
리눅스 쉘 명령어
① 압축 해제한mod_throttle-3.1.2 디렉토리로 이동 합니다. [root@nextline bin]# cd mod_throttle-3.1.2
② 모듈을 적재하기 위해mod_throttle.c파일을 컴파일 합니다. [root@nextline mod_throttle-3.1.2]# /usr/local/apache/bin/apxs -i -a -c mod_throttle.c apxs는 아파치 서버의 확장 모듈을 컴파일하고 설치하는 도구입니다.
옵션 설명 -i : 라이브러리 디렉토리에 so 파일 복사하라는 옵션 -a : httpd.conf 파일에 LoadModule 설정을 하라는 옵션 -c : 컴파일 하라는 옵션

( 4 ) mod_throttle.so 파일생성 확인
① 컴파일 완료 후/usr/local/apache/libexec 디렉토리에 mod_throttle.so 파일이 생성됩니다. [root@nextline mod_throttle-3.1.2]# ls /usr/local/apache/libexec/ mod_throttle.so
( 5 ) 모듈적재 확인
[vi 에디터 사용법] 사용형식: vi [옵션] [생성할 파일명/편집할 파일명] vi 에디터는 입력모드, 명령모드, 실행모드로 구분됩니다. 입력모드: vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기때문에 문자를 입력하기 전에 앞의 단축키중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다. 명령모드: 커서이동/문자삭제/문자(열)교체/문자열검색 등을 할수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다. 실행모드: 특별한 명령어를 실행하는 모드로서 명령어모드에서 ":"(콜론)를 누르면 vi 화면 하단 좌측에 vi 특수명령어를 입력할 수 있습니다.
[실행모드의 일반적으로 쓰이는 특수 명령어] q : 수정 작업이 이루어지지 않은 상태에서 vi 편집기에서 빠져나옵니다. q! : 수정 작업이 이루어진 부분을 적용시키지 않고 vi 편집기를 강제로 빠져나옵니다. w : 수정된 작업을 저장합니다. wq : 수정된 작업을 저장하고 vi 편집기에서 빠져나옵니다. 초기 명령어모드-> 입력모드진입 -> 편집 -> 명령어모드 -> 실행모드 -> 종료
① 컴파일 작업으로httpd.conf파일에 모듈이 등록되었는지 확인합니다. [root@nextline mod_throttle-3.1.2]# vi /usr/local/apache/conf/httpd.conf LoadModule throttle_module libexec/mod_throttle.so

( 6 ) httpd.conf파일의 메인 환경설정
메인 설정 부분은 가상호스트에도 공통으로 적용되는 설정으로 mod_throttle 모듈을 적용시키기 위해 아파치 환경 설정파일인 httpd.conf을 수정합니다.
① 다음 라인을 추가 합니다.
<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>
<Location /throttle-status>
Order deny,allow
Deny from all
Allow from all
</Location> </IfModule>

② 관리자모드 접속ip 설정
Order deny,allow
Deny from all
Allow from all
위 설정은throttle로 분석된 일hit 및 일 트래픽 제한에 대하여 상황페이지를 볼 관리자페이지에 대한 접속제한 설정입니다. 즉 관리자PC 한곳에서만 분석된 결과페이지를 볼 수 있도록 하려면 아래와 같이 수정합니다. 관리자PC 아이피 : XXX.XXX.XXX.XXX
Order deny,allow
Deny from all
Allow from XXX.XXX.XXX.XXX
( 7 ) 가상호스트 환경설정
개별 홈페이지별 트래픽 현황 및 관리를 하기 위해서는 httpd.conf 부분에 홈페이지 별로 설정을 하여야 하며 트래픽제한을 하지 않는 none모드로 설정 하도록 하겠습니다.
①nextline.net 도메인을 가진 가상호스트를 추가 하도록 하겠습니다.
ThrottlePolicy none
ServerAdmin admin@nextline.co.kr
DocumentRoot /home/nextline/public_html
Servername nextline.co.kr
ServerAlias www.nextline.co.kr

② httpd.conf 설정 후 적용시키기 위해 apache를 재 시작 시켜 줍니다. [root@nextline mod_throttle-3.1.2]#/usr/local/apache/bin/apachectl restart
( 8 ) 서버전체 throttle 상황보기 (관리자모드)
일hit수 일전송량의 제한을 웹브라우즈로 확인하기 위하여 다음과 같은 URL로 확인하도록 하겠습니다. 먼저 서버전체의 제한사항을 관리자가 확인하기 위한 예입니다.
① 주도메인이nextline.co.kr로 설정된 예입니다. 확인하는 방법: http://IP주소/throttle-status

( 9 ) 개별사이트 throttle 상황보기 (사용자모드)
확인하는 방법 1 :http://nextline.net/throttle-me

( 10 ) 트래픽 페이지 보는 방법
% 일일 허용 트래픽의 현재까지 사용량을 퍼센테이지로 나타낸 것입니다. 퍼센테이지 숫자가 “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 한 접속자가 웹 사이트를 방문한 후 다른 방문자가 생길 때까지의 경과 기간을 수치로 표시한 것입니다. 방문자가 많으면 많을수록 이 수치는 작아집니다.
( 11 ) 개별홈페이지 throttle 정책 적용 예
가상 호스트를 설정하여 throttle 정책을 적용하여 보도록 하겠습니다.
① nextline.net / Request 일 hit수를 10000으로 제한 / Volume - 일 트래픽 1G로 제한
ThrottlePolicy Volume 1024M 1d
ThrottlePolicy Request 10000 1d
ServerAdmin admin@nextline.net
DocumentRoot /home/nextline/public_html
Servername nextline.net
ServerAlias www.nextline.net
확인하는 방법1 : http://nextline.net/throttle-me 확인하는 방법2 : http://아이피/~아이디/throttle-me

②nextline.com / Volume - 일 트래픽을 300M로 제한
ThrottlePolicy Volume 1024M 1d
ServerAdmin admin@nextline.com
DocumentRoot /home/nextline/public_html
Servername nextline.com
ServerAlias www.nextline.com

확인하는 방법1 : http://nextline.net/throttle-me 확인하는 방법2 : http://아이피/~아이디/throttle-me

③ 서버전체throttle 상황보기 (관리자모드) 개별홈페이지에throttle 적용한 예를 관리자모드로 확인하도록 합니다. nextline.co.kr / none nextline.net / Request 일 hit수를 10000으로 제한 / Volume - 일 트래픽을 1G로 제한 nextline.com / Volume - 일 트래픽을 300M로 제한 확인하는 방법: http://IP주소/throttle-status
( 12 ) 트래픽 초기화
할당된 트래픽을 초과 하게 되면 트래픽 페이지에 해당 도메인의 색상이 붉은색으로 변하며, 해당 도메인의 맨 앞에 있는 숫자를 클릭해 주면 초기화 됩니다.
① 트래픽 초과화면

② 홈페이지 트래픽 초과 화면 다음과 같이 트래픽 초과 시 Service Temporarily Unavailable 오류메시지와 함께 사이트가 열리지 않습니다.

③ 트래픽 초기화 트래픽을 초기화 하거나 용량을 늘려주면 및 트래픽 페이지의 색상이 녹색으로 변하며 해당 홈페이지도 정상적으로 열리게 됩니다.

( 13 ) 트래픽 자동 초기화 설정을 위한 lynx설치
다수의 가상 도메인을 운영하고 계신 경우 트래픽 관리에 어려움을 겪을 수도 있으므로crontab에 등록하여 자동으로 트래픽을 리셋하는 방법을 알아보도록 하겠습니다. Lynx는 Unix등에서 사용하는 Text 기반의 Web Browser입니다. 트래픽 리셋 기능을 사용하기 위해서는 lynx패키지가 설치되어 있어야 합니다.
리눅스 쉘 명령어
[ rpm 조회옵션 ] -q : 패키지가 설치되어 있는지 질의하며 이 옵션을 단독으로 사용하면 패키지 이름과 버젼만 표시됩니다. -qa : 현재 설치된 모든 패키지 목록을 찾는데 사용합니다. -qi : 현재 설치된 패키지의 간략한 정보를 출력합니다. -ql : 현재 설치된 패키지의 내용을 보여주며 어떤 파일이 어디에 설치되어 있는지 확인할 때 사용합니다. -qa, -qi, -ql 옵션은 보통 grep명령과 같이 사용됩니다.
특정rpm패키지의 설치여부 확인하기 사용형식: rpm –qa | grep 확인하고자 하는 패키지 이름문자열 “|” 파이프 : 앞의 rpm –qa한 결과를 그대로 grep에게 넘겨주는 겁니다. grep는 어떤 패턴에 맞는 것을 뽑아내는 역할을 주로 하는데 앞에서 넘어온 rpm패키지 리스트 중에서 패키지 이름문자열에 해당하는 것만 뽑아내게 됩니다.
① Lynx 패키지가 설치되어 있는지 확인합니다. [root@nextline bin]# rpm –qa | grep lynx

② lynx 다운로드 해당 패키지가 설치되어 있지 않을 시 다음 사이트에서 다운로드 합니다. http://fr.rpmfind.net/linux/rpm2html/ http://mirror.secuidc.com/centos/4/os/i386/CentOS/RPMS/lynx-2.8.5-18.2.i386.rpm lynx를 다운로드 합니다. [root@nextline bin]# wget http://mirror.secuidc.com/centos/4/os/i386/CentOS/RPMS/lynx-2.8.5-18.2.i386.rpm

리눅스 쉘 명령어
rpm -U 옵션 : 이전버젼이 설치되어 있으면 업그레이드를 하며, 설치되어 있지 않으면 새롭게 설치합니다. 이전버젼이 설치되어 있을 경우에 환경설정파일을 제외하고 모두 새롭게 설치하게 되며 설치시에 이옵션을 사용하도록 합니다. rpm -v 옵션 : 설치 중 메시지를 보여줍니다. rpm -h 옵션 : 진행과정을 '#'으로 표시합니다. (--hash)
③ 위 옵션을 같이 사용하여 다운로드 받은 lynx-2.8.5-18.2.i386.rpm를 설치합니다. [root@nextline bin]# rpm -Uvh lynx-2.8.5-18.2.i386.rpm
④ lynx 패키지가 정상적으로 설치 되었는지 확인합니다. [root@nextline bin]# rpm –qa | grep lynx

⑮ 트래픽 자동 초기화 설정 트래픽을 자동으로 초기화 시키기 위해crontab에 등록하도록 하겠습니다.
[ vi 에디터 사용법] 사용형식: vi [옵션] [생성할 파일명/편집할 파일명] vi 에디터는 입력모드, 명령모드, 실행모드로 구분됩니다.
입력모드: vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기때문에 문자를 입력하기 전에 앞의 단축키중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다.
명령모드: 커서이동/문자삭제/문자(열)교체/문자열검색 등을 할수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다.
실행모드: 특별한 명령어를 실행하는 모드로서 명령어모드에서 ":"(콜론)를 누르면 vi 화면 하단 좌측에 vi 특수명령어를 입력할 수 있습니다.
[ 실행모드의 일반적으로 쓰이는 특수 명령어] q : 수정 작업이 이루어지지 않은 상태에서 vi 편집기에서 빠져나옵니다. q! : 수정 작업이 이루어진 부분을 적용시키지 않고 vi 편집기를 강제로 빠져나옵니다. w : 수정된 작업을 저장합니다. wq : 수정된 작업을 저장하고 vi 편집기에서 빠져나옵니다.
초기 명령어모드-> 입력모드진입 -> 편집 -> 명령어모드 -> 실행모드 -> 종료
리눅스 쉘 명령어
⑤ vi에디터를 이용하여 crontab을 편집합니다. [root@nextline bin]# vi /etc/crontab
⑥ 트래픽이 자정에 자동 리셋되도록crontab에 등록합니다. 00 0 * * * root lynx -source http://xxx.xxx.xxx.xxx/throttle-status?command=reset,*
( 14 ) crontab 설정방법
minute(분) hour(시) day_of_month(일) month(월) weekday(요일) command(명령) minute(분) 0 - 59 * 모든 분 hour(시) 0 - 23 * 모든 시 day_of_month(일) 1 - 31 * 모든 일 month(월) 1 - 12 weekday(요일) 일요일부터 금요일까지를 나타내는 0 - 6 command(명령) 쉘 명령
주의: 수행시간이 긴 작업을 crontab을 걸려면 백그라운드로 실행합니다.
백그라운드 실행방법: 맨 끝에 & 를 붙인다. 00 0 * * * root lynx -source http://xxx.xxx.xxx.xxx/throttle-status?command=reset,* &
|
|