작성자 : 기술지원부 김 삼 수
bandwidth모듈을 이용한 대역폭 제한하기
mod_bandwidth는 방문자의 접속시 트래픽을 얼마이하로 제한하는 설정입니다. 즉, 서버 한대에 여러개의 웹사이트가 운영되고 있는 상황에서 특정웹사이트가 전체 트래픽의 대부분을 차지할 때에 특정 웹사이트의 전체 트래픽을 얼마이하로 제한하기 위한 설정방법이라고 할 수 있습니다.
bandwidth 설치
① mod_bandwidth.c 다운로드
wget은 웹에서 자동적으로 파일을 받아오는데 사용되는 유틸리티이며 HTTP, HTTPS, FTP 프로토콜을 지원합니다. mod_bandwidth.c 파일을 다운로드 합니다. [root@nextline ~]# wget ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c
② mod_bandwidth.c 컴파일
모듈을 적재하기 위해 mod_throttle.c파일을 컴파일 합니다.
apxs는 아파치 서버의 확장 모듈을 컴파일하고 설치하는 도구입니다.
옵션 설명 -i : 라이브러리 디렉토리에 so 파일 복사하라는 옵션 -a : httpd.conf 파일에 LoadModule 설정을 하라는 옵션 -c : 컴파일 하라는 옵션
[root@nextline ~]# /usr/local/apache/bin/apxs -i -a -c mod_bandwidth.c

③ mod_bandwidth.so 파일 확인
컴파일 후 공유라이브러리 파일의 생성을 확인합니다. [root@nextline ~]# ls /usr/local/apache/libexec

④ 모듈적재 확인
vi 에디터 사용법
사용형식 : vi [옵션] [생성할 파일명/편집할 파일명]
vi 에디터는 입력모드, 명령모드, 실행모드로 구분됩니다.
입력모드 : vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기 때문에 문자를 입력하기 전에 앞의 단축키 중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다. 명령모드 : 커서이동/문자삭제/문자(열)교체/문자열검색 등을 할 수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다.
x : vi 명령모드에서 커서위치의 한 문자 삭제 dw : vi 명령모드에서 커서위치의 한 단어 삭제 dd : vi 명령모드에서 커서위치의 행 삭제 Ndd : vi 명령모드에서 커서위치의 여러 행 동시 삭제
실행모드 : 특별한 명령어를 실행하는 모드로서 명령어모드에서 ":"(콜론)를 누르면 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

⑤ 디렉토리생성
아파치가 실행 할 때의 사용자권한(nobody 또는 apache )으로 읽기, 쓰기, 실행권한이 있는 디렉토리가 있어야 합니다. 기본적으로 /tmp/apachebw , /tmp/apachebw/link , /tmp/apachebw/master 이렇게 생성합니다. 변경하려면 BandWidthDataDir 지시자를 이용합니다. (위 디렉토리에 문제가 있으면 error로그 파일에 남기고 ,기능은 비활성화 됩니다.)
[root@nextline ~]# mkdir -p /tmp/apachebw/master [root@nextline ~]# mkdir -p /tmp/apachebw/link [root@nextline ~]# chown -R nobody.nobody /tmp/apachebw [root@nextline ~]# chmod -R 777 /tmp/apachebw

⑥ httpd.conf 파일설정
대역폭 제한을 위하여 httpd.conf파일을 수정 편집합니다. [root@nextline ~]# vi /usr/local/apache/conf/httpd.conf

⑦ 가상호스트(홈페이지) 별 대역폭 제한
ex) nextline.co.kr 도메인에 대한 대역폭 제한 설정입니다.
DocumentRoot /home/nextline/public_html ServerName nextline.co.kr ServerAlias www.nextline.co.kr BandWidthModule On LargeFileLimit 51200 102400 MaxConnection 5
bandwidth모듈파일을 불러들이는 설정입니다. BandWidthModule On 50M 넘는 파일은 100KByte/Sec 으로 제한 한다. LargeFileLimit 51200 102400 동시에 5개의 접속을 허용한다. MaxConnection 5

⑧ 지시자
BandWidth 에서 사용할 임시 디렉토리를 지정합니다. (기본:/tmp/apachebw) BandWidthDataDir 디렉토리: Context : server
BandWidthModule 사용 여부를 설정합니다. (기본 Off) BandWidthModule On 또는 Off Context : server, 가상호스트 안에 사용 할 경우 가상호스트 마다 BandWidthModule On 설정을 하여야 하며, 지시자 안에 넣을 때는 따로 넣어주지 않아도 됩니다.
BandWidth 에서 지연할 시간을 설정합니다. (microsecond 단위) BandWidthPulse Context : server 예전에는 지연시간이 1초로 고정되어 있었습니다. 이 말은 512Bit/sec 라면. 1KBit 를 보내려면, 1KBit을 보낸후에 2초 기다린후 512Bit 을 보냅니다. 그렇지만, "BandWidthPluse 1000000" (1초)를 설정하면, 512Bit을 보내고 1초 기다린후 512Bit을 보냅니다. 이 값을 설정하면, 보다 부드럽게 제한하면서 보낼수 있습니다. 설정값을 (1/5 초) 이상 사용하길 권장합니다. 장점 : 부드럽게 트래픽을 제한할 수 있습니다. 단점 : 패킷의 양이 많아지며, 값이 적을수록 서버에 부하를 많이 줍니다.
BandWidth 를 통한 대역폭을 제한합니다. BandWidth Context : Directory domain,ip등은 접속하는 사용자의 ip및 도메인이다. ip 는 넷마스크를 적용할 수 있습니다. rate : 바이트 단위 초당 대역폭, 0은 제한을 두지 않습니다.
큰 파일만 대역폭을 제한합니다. LargeFileLimit Context : Directory filesize : filesize 는 파일크기(KByte)이 파일 크기 이상에만 rate 적용 합니다. rate : 바이트 단위 초당 대역폭(Byte/Sec), 0은 무제한 입니다.
최대 연결수 제한 (기본 0 제한없음) MaxConnection Context : Directory 동시연결수가 connections 이상이면 연결을 거부합니다.
최소 대역폭 설정 (기본 255Byte/Sec , 0을 설정해도 255 이다., -1을 넣으면 최소대역폭은 0이 됩니다.) MinBandWidth (BandWidth, LargeFileLimit 보다 우선합니다.)
⑨ 아파치 재시작
mod_bandwidth 트래픽제한을 적용하기 위하여 아파치를 재시작 합니다.

|
|