강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

개별홈페이지 네트워크 대역폭 제한하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

개별홈페이지 네트워크 대역폭 제한하기

 

 

 

 

 

바로 앞에서는 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:07mod_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:08mod_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


….
중략
 [PRESERVING EXISTING CONFIG FILE: /usr/local/apache/conf/mime.types]

./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        |

|                                http://www.apache.org/  |

+--------------------------------------------------------+

[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이다.

 

 

 

 

 그리고 각 세션당 최소 로딩속도를 설정한다.

 

 

 

 

 즉 여러개의 로딩이 한번에 이루어 졌을 때에 해당 세션에게 적용한 최소속도를 지정한다.

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  162 명