개별홈페이지 네트워크 대역폭 제한하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,393 조회
- 0 추천
- 목록
본문
개별홈페이지 네트워크 대역폭 제한하기
바로 앞에서는 mod_throttle이라는 것을 이용하여 특정 웹사이트에 대한 일 hit수와 트래픽을 제한하는 방법에 대해서 배웠다.
이번에 배울 mod_bandwidth는 하루동안이라는 기간없이 방문자의 접속시 트래픽량을 제한하는 설정이다.
즉 한대의 서버에 여러개의 웹사이트가 운용되고 있는 상황에서 특정웹사이트가 전체트래픽의 대부분을 차지할 때에 특정 웹사이트의 전체 트래픽을 제한하기 위한 설정방법이라고 할 수 있다.
이번 절에서는
mod_bandwidth모듈과 mod_bandwidth.so라는 DSO방식을 모두 사용하는 방법으로 이를 구현해 보도록 할 것이다.
작업1. 현재 실행중인 아파치를 중지
먼저 다음과 같이 현재 실행되고 있는 아파치웹서버를
중지한다.
[root@sulinux apache]# /usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl stop: httpd stopped [root@sulinux apache]# [root@sulinux apache]# ps -ef | grep httpd root 12316 2041 0 16:11 pts/0 00:00:00 grep httpd [root@sulinux apache]#
|
작업2. bandwidth 모듈파일 소스 가져오기 및 컴파일하기
그리고 다음과 같이 wget을
이용하여 mod_bandwidth.c 모듈파일을 가져온다.
[root@sulinux extra]# cd /usr/local/apache/src/modules/extra [root@sulinux extra]# [root@sulinux extra]# pwd /usr/local/apache/src/modules/extra [root@sulinux extra]# [root@sulinux extra]# wget ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c --16:03:33-- ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c => `mod_bandwidth.c' Resolving ftp.cohprog.com... 완료. Connecting to ftp.cohprog.com[193.247.238.1]:21... connected. anonymous로서 로그인하고 있다.
..로그인 했습니다! ==> SYST ... 완료. ==> PWD ... 완료. ==> TYPE I ... 완료. ==> CWD /pub/apache/module/1.3.0 ... 완료. ==> PORT ... 완료. ==> RETR mod_bandwidth.c ... 완료. 길이: 43,630 (unauthoritative)
100%[==================================================>] 43,630 25.96K/s ETA 00:00
16:03:43 (25.96 KB/s) - `mod_bandwidth.c'가 보존되었습니다 [43630]
[root@sulinux extra]# [root@sulinux extra]# ls -l 합계 280 -rw-r--r-- 1 root root 39576 4월 16 13:07 libextra.a -rw-r--r-- 1 root root 43630 4월 16 16:03 mod_bandwidth.c -rw-r--r-- 1 root root 97711 4월 16 13:04 mod_throttle.c [root@sulinux extra]#
|
가져온 mod_bandwidth.c파일을 다음과 같이 직접 컴파일한다.
컴파일 결과로 생성된 파일은 mod_bandwidth.o파일이다.
이 파일을 다시 gcc로 컴파일하여 mod_bandwidth.so라는 파일을 생성한다.
[root@sulinux extra]# gcc -c -I/usr/local/apache/include -O2 -m486 -fno-strength-reduce mod_bandwidth.c -fpic -DSHARED_MODULE mod_bandwidth.c `-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead. `-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead. [root@sulinux extra]# [root@sulinux extra]# ls -l 합계 304 -rw-r--r-- 1 root root 39576 4월 16 13:07 libextra.a -rw-r--r-- 1 root root 43630 4월 16 16:03 mod_bandwidth.c -rw-r--r-- 1 root root 21172 4월 16 16:07 mod_bandwidth.o -rw-r--r-- 1 root root 97711 4월 16 13:04 mod_throttle.c [root@sulinux extra]# [root@sulinux extra]# gcc -shared -o mod_bandwidth.so mod_bandwidth.o [root@sulinux extra]# [root@sulinux extra]# ls -l 합계 332 -rw-r--r-- 1 root root 39576 4월 16 13:07 libextra.a -rw-r--r-- 1 root root 43630 4월 16 16:03 mod_bandwidth.c -rw-r--r-- 1 root root 21172 4월 16 16:07 mod_bandwidth.o -rwxr-xr-x 1 root root 28345 4월 16 16:08 mod_bandwidth.so -rw-r--r-- 1 root root 97711 4월 16 13:04 mod_throttle.c [root@sulinux extra]# |
이제 위와 같이 생성된 mod_bandwidth.so 파일을 아파치의 /usr/local/apache/src/modules디렉토리에 복사한다.
작업3. configure 작업하기
이제 아파치를 재컴파일하기 위하여 configure작업을 다음과 같이 수행한다.
즉 다음 옵션을 추가로 넣어서 configure작업을 수행한다.
--enable-rule=SHARED_CORE
--enable-module=so
위의 두 컴파일옵션은 아파치에서
DSO로 설정할 수 있도록 아파치를 재컴파일하기 위한 옵션이다.
이제 다음과 같이 아파치를 재컴파일한다.
[root@sulinux apache]# ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a --add-module=src/modules/extra/mod_throttle.c --add-module=src/modules/extra/mod_bandwidth.c --enable-rule=SHARED_CORE --enable-module=so Configuring for Apache, Version 1.3.28 + using installation path layout: Apache (config.layout) + activated php4 module (modules/php4/libphp4.a) + on-the-fly added and activated throttle module (modules/extra/mod_throttle.o) + on-the-fly added and activated bandwidth module (modules/extra/mod_bandwidth.o) Creating Makefile Creating Configuration.apaci in src Creating Makefile in src + configured for Linux platform + setting C compiler to gcc + setting C pre-processor to gcc -E + using "tr [a-z] [A-Z]" to uppercase 중략... [root@sulinux apache]# |
작업4. make작업
이제 아파치를 컴파일하기 위하여 make를 실행한다.
[root@sulinux apache]# make ===> src make[1]: 들어감 `/usr/local/apache' 디렉토리 make[2]: 들어감 `/usr/local/apache/src' 디렉토리 ===> src/os/unix …중략 gcc -c -I../os/unix -I../include -DLINUX=22 -fpic -DSHARED_CORE `../apaci` checkgid.c gcc -DLINUX=22 -fpic -DSHARED_CORE `../apaci` -o checkgid -L../os/unix -L../ap checkgid.o -lm -lap -los -Wl,-rpath,/usr/local/mysql/lib/mysql -rdynamic -L/usr/local/mysql/lib/mysql -Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4 -rdynamic -L/usr/local/mysql/lib/mysql -lcrypt -lcrypt -lmysqlclient -lresolv -lm -ldl -lnsl -lcrypt -lcrypt -lm -lcrypt -lexpat -ldl make[2]: 나감 `/usr/local/apache/src/support' 디렉토리 <=== src/support make[1]: 나감 `/usr/local/apache' 디렉토리 <=== src [root@sulinux apache]# |
작업5. make install 작업 수행
컴파일이 끝났으므로 이제 make install작업을 수행한다.
[root@sulinux apache]# make install make[1]: 들어감 `/usr/local/apache' 디렉토리 ===> [mktree: Creating Apache installation tree] ./src/helpers/mkdir.sh /usr/local/apache/bin ./src/helpers/mkdir.sh /usr/local/apache/bin ./src/helpers/mkdir.sh /usr/local/apache/libexec ./src/helpers/mkdir.sh /usr/local/apache/man/man1 ./src/helpers/mkdir.sh /usr/local/apache/man/man8 ./src/helpers/mkdir.sh /usr/local/apache/conf ./src/helpers/mkdir.sh /usr/local/apache/htdocs
./src/helpers/install.sh -c -m 644 ./conf/magic /usr/local/apache/conf/magic.default [PRESERVING EXISTING CONFIG FILE: /usr/local/apache/conf/magic] <=== [config] make[1]: 나감 `/usr/local/apache' 디렉토리 +--------------------------------------------------------+ | You now have successfully built and installed the | | Apache 1.3 HTTP server. To verify that Apache actually | | works correctly you now should first check the | | (initially created or preserved) configuration files | | | | /usr/local/apache/conf/httpd.conf | | | and then you should be able to immediately fire up | | Apache the first time by running: | | | | /usr/local/apache/bin/apachectl start | | | Thanks for using Apache. The Apache Group | +--------------------------------------------------------+ [root@sulinux apache]# |
작업6. httpd.conf파일 설정
이제 대역폭 제한을 위하여
httpd.conf파일을 수정편집한다.
########## BANDWIDTH CONFIGURATION START ##################### BandWidthModule On LoadModule bandwidth_module src/modules/mod_bandwidth.so <Directory /home/*/www> BandWidth 192.168.0 0 BandWidth linux.co.kr 0 BandWidth all 1024 LargeFileLimit 2048 2048 </Directory> ########## BANDWIDTH CONFIGURATION END ##################### |
위의 설정은 개별 방문자들에 대한 트래픽대역폭을 제한하기 위하여 httpd.conf파일을 설정한 것이다.
다음은 위의 설정의미를 설명한 것이다.
BandWidthModule On
LoadModule bandwidth_module
src/modules/mod_bandwidth.so
위의 설정은 bandwidth모듈파일을 불러들이기 위한 설정이다.
<Directory /home/*/www>
BandWidth 192.168.0 0
BandWidth linux.co.kr 0
BandWidth all 1024
LargeFileLimit 2048 2048
</Directory>
위의 설정은 속도제한을 할 대상디렉토리를 지정한 것이다.
즉 모든 일반사용자들의 홈디렉토리인 /home/*/www 디렉토리내에 있는 웹파일을 로딩할 때에는 다음과 같은 제한을 하겠다라는 것이다.
다음은 제한 내용이다.
BandWidth 192.168.0 0
위의 설정은 192.168.0은 192.168.0.*을 의미하는 네트워크로서 이 네트워크에 속한 사이트에 대한 속도제한은 하지않겠다는 의미이다.
즉 0는 속도제한을 하지않는다는 의미이다.
BandWidth linux.co.kr 0
그리고 linux.co.kr 사이트에 대해서도 속도제한을 하지 않겠다라는 설정이다.
BandWidth all 1024
그외 나머지 사이트들에 대한 속도제한을 1024bytes/sec로 하겠다는 의미이다.
위에서 1024로 지정한
단위는 bytes/sec임에 주의하기 바란다.
LargeFileLimit 1024 2048
위의 설정은 1024Kbyte이상의 용량을 가진 파일을 로딩할 때는 속도를 2048bytes/sec(2K)로 제한한다는 의미이다.
작업7. 트래픽제한 적용을 위한 아파치를 재시작
이제 지금까지 작업한 트래픽제한을 적용하기 위하여 아파치를 재시작한다.
[root@sulinux conf]# /usr/local/apache/bin/apachectl restart /usr/local/apache/bin/apachectl restart: httpd restarted [root@sulinux conf]# [root@sulinux conf]# ps -ef | grep httpd root 18030 1 0 17:17 ? 00:00:00 /usr/local/apache/bin/httpd daemon 18054 18030 0 17:30 ? 00:00:00 [libhttpd.ep] daemon 18055 18030 0 17:30 ? 00:00:00 [libhttpd.ep] daemon 18056 18030 0 17:30 ? 00:00:00 [libhttpd.ep] daemon 18057 18030 0 17:30 ? 00:00:00 [libhttpd.ep] daemon 18058 18030 0 17:30 ? 00:00:00 [libhttpd.ep] root 18060 2041 0 17:30 pts/0 00:00:00 grep httpd [root@sulinux conf]# |
이상과 같이 웹사이트의 트래픽제한하는 방법을 알아보았다.
작업8. bandwidth에서 설정할 수 있는 다양한 지시자들
지금까지 bandwidth의 설치와 기본 적용방법들을 보았다.
이제 보다 다양한 대역폭 제한 방법에 대한 지시자들의 사용법에 대해서 알아보겠다.
bandwidth에서 사용하는 지시자들의 종류
대부분 bandwidth에서
사용하는 지시자은 다음과 같이 3가지로 나뉘어진다.
BandWidth
LargeFileLimit
MinBandWidth
bandwidth에서 사용하는 이들 지시자들을 사용할 수 있는 곳은 다음과 같다.
- httpd.conf 파일내에서의 메인서버 설정부분에서 설정
- httpd.conf파일내의 개별 디렉토리 설정부분에서 설정
- 개별 사용자 디렉토리내에서 설정할 수 있는 .htaccess 파일 내에서 설정
위의 파일들 내에서 설정되는 bandwidth의 지시자 설정방법들
BandWidth
사용형식: BandWidth 도메인 | IP주소
| all 속도
위의 지시자는 각각의 도메인 또는 IP주소에 따라서 속도제한하는 지시자이다.
여기서 “all”은 모든 호스트를 의미하며 “192.168.1.0/24”와 같이 네트워크로 표시할 수도 있다.
속도부분에서 지정되는 단위는 bytes/sec이다.
만약 속도부분이 0 이면 속도제한을 하지 않는 것으로 인식한다.
LargeFileLimit
사용형식: LargeFileLimit 파일크기 속도
위의 지시자는 지정한
용량이상의 파일을 로딩하려고 할 때 그 속도를 제한하는 지시자이다.
파일크기에서 지정되는 단위는 KByte이다.
그리고 속도에서 지정되는 단위는 Byte/sec이다.
다음은 이에 대한 예이다.
LargeFileLimit 2048 1024
위 예의 의미는 2048KB 이상되는 파일을 로딩하려고하면
1024bytes/sec의 속도로 제한한다는 설정이다.
LargeFileLimit 4096 2048
위 예의 의미는 4096KB이상되는 파일을 로딩하려고 하면
2048bytes/sec의 속도로 제한한다는 설정이다.
그리고 만약 파일의 크기가 1024KB보다 크고 2048KB보다
작을 경우에는 1024bytes/sec의 속도가 적용된다.
MinBandWidth
사용형식: MinBandWidth 도메인 | IP주소 | all 속도
이 지시자는 로딩하는 데이터의 최소 전송속도를 제한하는 지시자이다.
기본값은 all, 256이다.
그리고 각 세션당 최소 로딩속도를 설정한다.
즉 여러개의 로딩이 한번에 이루어 졌을 때에 해당 세션에게 적용한 최소속도를 지정한다.
관련자료
-
이전
-
다음