본문 바로가기

mod_bandwidth 설치, httpd.conf 파일설정

조회 수 1157 추천 수 0 2014.06.24 15:06:55
출처 :  

아파치에 접속하는 사용자들의 대역폭을 제한한다. mod_throttle 와 비슷하지만, 용도가 다르다.
이놈들은 아파치 정식 모듈이 아니니.. DSO모드로 올렸다가. 이상하면 내린다.^^;


1. 개념
  한 접속당 일정양(Byte/Sec)을 정해 놓고, 그 양이 넘으면 delay 시켜 일정한 트래픽을 유지한다. 


2. 설치
  (1) 먼저 모듈을 구한다. 어디서 ?? 개발자 사이트에서
    

http://www.cohprog.com/v3/bandwidth/intro-en.html
    
wget 
ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c


  (2) 컴파일 및 설치 (apxs 를 사용하여 한방에 끝낸다.)
    

/usr/local/apache/bin/apxs -i -a -c mod_bandwidth.c
    

## 옵션 설명.
      -i : 라이브러리 디렉토리에 so 파일 복사하라는 옵션
      -a : httpd.conf 파일에 LoadModule 설정을 하라는 옵션
      -c : 컴파일 하라는 옵션

** (( 주의 ))

mkdir /tmp/apachebw
mkdir -p /tmp/apachebw/master/
mkdir -p /tmp/apachebw/link
chown -R nobody:nobody /tmp/apachebw

이렇게 디렉토리를 만들어주지 않으면 작동하지 않는다.. error_log 에 로그만 뿌린다.^^


3. 설정
  (1) httpd.conf 파일을 열어서 다음과 같이 설정한다.

## 1인 트래픽 제한 모듈 로딩.
LoadModule bandwidth_module   libexec/mod_bandwidth.so

  아파치가 실행할때의 사용자권한(nobody 또는 apache )으로 읽기,쓰기,실행권한이 있는 디렉토리가 있어야 한다.
  기본적으로 /tmp/apachebw , /tmp/apachebw/link , /tmp/apachebw/master 이렇게 생성한다. 
  변경하려면 BandWidthDataDir 지시자를 이용한다.
  (위 디렉토리에 문제가 있으면 error로그 파일에 남기고 ,기능은 비활성화 된다.)


지시자:
1. BandWidth 에서 사용할 임시 디렉토리 지정 (기본:/tmp/apachebw)
BandWidthDataDir 디렉토리: --> 따로 설정을 안해도 기본으로 잡힌다.
  사용처 : 전체설정

2. 이제 전송 속도 제한 기능을 하는 모듈을 사용하겠다는 것을 지정해 
   주어야 합니다. 디렉토리별 설정 위에 다음 줄을 추가하시면 됩니다.

BandWidthModule On


* BandWidthModule 사용 여부 (기본 Off)
BandWidthModule On 또는 Off 
  사용처 : 전체설정, <Directory>별 설정


 가상호스트 안에 사용할경우 가상호스트 마다 BandWidthModule On 설정을 하여야 하며,
<Drectory> 지시자 안에 넣을때는 따로 넣어주지 않아도 된다.

* BandWidth 에서 지연할 시간 설정 (microsecond 단위)
BandWidthPulse <microseconds>
  사용처 : 전체설정


예전에는 지연시간이 1초로 고정되어 있었다. 이 말은 512Bit/sec 라면. 1KBit 를 보내려면, 
1KBit을 보낸후에 2초 기다린후 512Bit 을 보냈다. 그렇지만, "BandWidthPluse 1000000" (1초를    설정하면, 512Bit을 보내고 1초 기다린후 512Bit을 보낸다.
이 값을 설정하면, 보다 부드럽게 제한하면서 보낼수 있다. 설정값을 (1/5 초) 이상 사용하길 권장한다.


  장점 : 부드럽게 트래픽을 제한할 수 있다.
  단점 : 패킷의 양이 많아지며, 값이 적을수록 서버에 부하를 많이 준다.

3. 이제 실제적인 전송 속도 제한의 옵션을 알아 보겠습니다.  

   BandWidth, LargeFileLimit, MinBandWidth 이렇게 세가지의 지시자가 
   있습니다. 각각에 대해서 알아 봅시다.

     o BandWidth

       문  법: BandWidth 도메인|IP주소|all 속도 
       기본값: 없음 
       사용처: 전체 설정, 디렉토리별 설정, .htaccess

 

       호스트에 따라 속도의 제한을 걸 수 있습니다. all은 모든 호스트에 
       대해서 제한을 거는 것입니다. 도메인이나 IP주소로 접속 호스트를 
       지정할 수 있습니다. 그리고 네트워크/마스크 포맷*으로 지정할 수도 
       있습니다. (예: 192.168.0.0/24)

       속도는 Bytes/second로 나타냅니다. 0의 경우는 제한이 없는 것입니다.

       디렉토리별 설정에서 사용한 예를 들겠습니다.

 

       <Directory /home/httpd/html> 
         BandWidth 192.168.1 0 
         BandWidth foobar.net 0 
         BandWidth all 1024 
       </Directory>
           
       /home/httpd/html 디렉토리에서의 제한을 한 것입니다. 192.168.1.* IP 
       주소를 가진 호스트와 *.foobar.net이라는 도메인명을 사용하는 
       호스트에 대해서는 제한을 걸지 않으며 그 외 모든 접속에 대해서 
       1024Bytes/sec으로 제한을 걸었습니다.

  

   o LargeFileLimit

       문  법: LargeFileLimit 파일크기 속도 
       기본값: 없음 
       사용처: 전체 설정, 디렉토리별 설정, .htaccess

 

       일정 이상의 크기를 가진 파일을 누군가가 받아 가려 할 때 그 속도의 
       제한을 걸 수 있습니다. 파일크기는 KByte 기준이며 속도는 역시 
       Bytes/secound입니다.

 

       LargeFileLimit 1024 4096 
       LargeFileLimit 2048 2048

 

       위 예제는 1024 ~ 2047KB 크기의 파일을 받아가려 할 때 속도를 
       4KB/sec으로 제한하고 2048KB 이상의 파일은 2KB/sec으로 제한을 하는 
       것입니다.

 

     o MinBandWidth

       문  법: MinBandWidth 도메인|IP주소|all 속도 
       기본값: all, 256 
       사용처: 전체 설정, 디렉토리별 설정, .htaccess

      

       데이타 전송의 최저 속도를 지정하게 됩니다. 예를 들어서 설명하는 
       것이 가장 좋을 것 같군요.

       BandWidth를 4096 (4KBytes/sec)으로 지정하고 MinBandWidth가 1024로 
       지정이 되어 있을 때:

         - 지정된 호스트에서 하나만 접속할 경우, 4096bytes/sec이 최고의 
           속도가 됩니다.

         - 지정된 호스트에서 두개가 동시에 접속할 경우, 각각의 세션에 대해 
           2048Bytes/sec이 최고의 속도가 됩니다.

         - 더 많은 동시 접속이 일어나도 세션 당 최고 속도는 1024Bytes/sec 
           이하로는 줄지 않습니다. (MinBandWidth 값이 1024기 때문에)

       MinBandWidth가 "-1"로 지정되면 모든 세션에 대해 최고 속도는 
       BandWidth나 LageFileLimit에서 지정한 속도가 나올 수 있게 됩니다.

       BandWidth를 4096으로 지정하고 MinBandWidth가 -1이라면 동시에 지정된 
       호스트에서 몇개의 접속을 하더라도 각 세션의 속도는 4096Bytes/sec 
       까지 나오게 되는 것입니다.

 

4. 최대 연결수 제한 (기본 0 제한없음)
    MaxConnection <connections>
    사용처 : <Directory>별 설정 


    동시연결수가 connections 이상이면 연결을 거부한다.
    (가상 호스트별 최대 동시 연결수 제한에 좋을것 같음^^;)


예))  가상호스트 속에 들어간다.
        BandWidthModule On
        ## 50M 넘는 파일은 100KByte/Sec 으로 제한 한다.
        LargeFileLimit 51200 102400
        ## 동시에 5개의 접속을 허용한다.
        MaxConnection 5

 

 

 

아파치 전송 속도를 제한하는 bandwidth 입니다. 여러 호스팅을 같이 하는 서버에서 일정 호스트에 요청되는 리퀘스트가 많을 경우 다른 호스트에도 영향을 주게 되지요
이때 이 호스트에 bandwidth 를 걸어둠으로 해서 이호스트에 과도한 요청을 요구해도다른 호스트에는 영향을 주지 않도록 하는 기법입니다. 그럼..유용하게 사용하시길.


icon_disket.gif httpd-devel-2.0.40-21.i386.rpm

아파치에서 전송 속도 제한하기

(모든 설명은 레드햇 6.0을 기준으로 합니다.)

1. 아파치 1.3.x용 bandwidth 모듈이 필요합니다.
ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c를 받아 오시면 됩니다. 
레드햇 6.0 이상을 기반으로 한 배포판에는 이 모듈이 포함되어 있습니다. 
/usr/lib/apache/mod_bandwidth.so가 이미 존제하는 분은 컴파일 과정을 생략하시면 됩니다.

참고: 레드햇에 포함된 버젼은 1.2 버젼입니다. 최신 버젼은 2.0 버젼이며 다음의 설명들에 1.2 버젼에는 없는 기능의 경우에는 *로 마크를 하겠습니다.


2. 아파치 모듈로의 컴파일이 필요합니다.
o 아파치 소스와 같이 컴파일 하려면 아파치 소스의 src/modules/extra/ 디렉토리로 mod_bandwidth.c를 복사한 후에 
./configure시에 --add-module=mod_bandwidth.c 옵션을 주시면 됩니다.

o 직접 컴파일 하려면 다음의 명령을 따라하시면 됩니다. 물론 그러기위해서는 아파치의 개발용 헤더들이 시스템에 설치되어 있어야 합니다.
레드햇의 경우 apache-devel이라는 패키지로 존재합니다. 그 위치는 /usr/include/apache/에 있습니다. (배포판에 따라 틀릴 수 있습니다.)

$ gcc -c -I/usr/include/apache -O2 -m486 -fno-strength-reduce mod_bandwidth.c -fpic -DSHARED_MODULE mod_bandwidth.c
$ gcc -shared -o mod_bandwidth.so mod_bandwidth.o

$는 쉘 프롬프트를 나타내며 는 줄이 이어진다는 뜻입니다. 그러니까 한줄로 붙여 쓰시기 바랍니다.


3. 컴파일된 모듈을 아파치 모듈이 위치하는 디렉토리로 옮기시기 바랍니다.
레드햇의 경우 /usr/lib/apache/에 위치합니다. 직접 컴파일하셨다면 지정한 것에 따라 틀릴 수 있습니다. 알아서 하시기 바랍니다. :)


4. 아파치의 설정 파일을 고쳐야 할 것입니다. 
그럼 하나씩 고치는 방법에 대해서 알아 보겠습니다.

1. 모듈로 컴파일 했기 때문에 모듈을 읽도록 해야 합니다. httpd.conf에서 LoadModule foobar_modules modules/mod_foobar.so 같은 내용이 있는 부분이 있습니다. 
그 하단부에 다음 줄을 추가 하십시오.

LoadModule bandwidth_module modules/mod_bandwidth.so
마지막은 모듈의 위치입니다. 설치한 것에 따라 설정하십시오.

httpd.conf 설정에 ClearModuleList가 있다면 다음 줄이 추가되어야 합니다.

AddModule mod_bandwidth.c

비슷한 내용이 있는 부분의 아래에 적으시면 될 것입니다.


2. 이제 전송 속도 제한 기능을 하는 모듈을 사용하겠다는 것을 지정해주어야 합니다. 
디렉토리별 설정 위에 다음 줄을 추가하시면 됩니다.

   BandWidthModule On

3. 이 모듈이 사용하기 위해서는 데이타를 기록할 장소가 필요합니다.
   기본값으로 /tmp/apachebw 디렉토리를 사용합니다.

   /tmp/apachebw/link
   /tmp/apachebw/master

   이렇게 디렉토리를 생성해 주시십시오. 퍼미션은 nobody 사용자가 쓸 수있는 권한이 있어야 합니다. 
   (여기서 nobody는 아파치가 사용하는 사용자입니다. 
   다른 사용자를 사용한다면 그 사용자의 권한으로 줘야겠지요.) 생각하기 싫으신 분은 다음 명령을 실행하십시오.

   chown root.nobody /tmp/apachebw
   chmod -R 770 /tmp/apachebw/


4. 이제 실제적인 전송 속도 제한의 옵션을 알아 보겠습니다.
BandWidth, LargeFileLimit, MinBandWidth 이렇게 세가지의 지시자?가있습니다. 각각에 대해서 알아 봅시다.

o BandWidth

문  법: BandWidth <도메인|IP주소|all> <속도>
기본값: 없음
사용처: 전체 설정, 디렉토리별 설정, .htaccess

호스트에 따라 속도의 제한을 걸 수 있습니다. all은 모든 호스트에대해서 제한을 거는 것입니다. 
도메인이나 IP주소로 접속 호스트를지정할 수 있습니다. 그리고 네트워크/마스크 포맷*으로 지정할 수도있습니다. (예: 192.168.0.0/24)

속도는 Bytes/second로 나타냅니다. 0의 경우는 제한이 없는 것입니다.

디렉토리별 설정에서 사용한 예를 들겠습니다.


  BandWidth 192.168.1 0
  BandWidth foobar.net 0
  BandWidth all 1024


/home/httpd/html 디렉토리에서의 제한을 한 것입니다. 
192.168.1.* IP주소를 가진 호스트와 *.foobar.net이라는 도메인명을 사용하는 호스트에 대해서는 제한을 걸지 않으며 그 외 모든 접속에 대해서1024Bytes/sec으로 제한을 걸었습니다.

        o LargeFileLimit

문  법: LargeFileLimit <파일크기> <속도>
기본값: 없음
사용처: 전체 설정, 디렉토리별 설정, .htaccess

일정 이상의 크기를 가진 파일을 누군가가 받아 가려 할 때 그 속도의제한을 걸 수 있습니다. 
파일크기는 KByte 기준이며 속도는 역시Bytes/secound입니다.

LargeFileLimit 1024 4096
LargeFileLimit 2048 2048

위 예제는 1024 ~ 2047KB 크기의 파일을 받아가려 할 때 속도를4KB/sec으로 제한하고 2048KB 이상의 파일은 2KB/sec으로 제한을 하는것입니다.

        o MinBandWidth

문  법: MinBandWidth <도메인|IP주소|all> <속도>
기본값: all, 256
사용처: 전체 설정, 디렉토리별 설정, .htaccess

데이타 전송의 최저 속도를 지정하게 됩니다. 예를 들어서 설명하는 것이 가장 좋을 것 같군요.

BandWidth를 4096 (4KBytes/sec)으로 지정하고 MinBandWidth가 1024로 지정이 되어 있을 때:


  - 지정된 호스트에서 하나만 접속할 경우, 4096bytes/sec이 최고의 속도가 됩니다.

  - 지정된 호스트에서 두개가 동시에 접속할 경우, 각각의 세션에 대해 2048Bytes/sec이 최고의 속도가 됩니다.

  - 더 많은 동시 접속이 일어나도 세션 당 최고 속도는 1024Bytes/sec 이하로는 줄지 않습니다. (MinBandWidth 값이 1024기 때문에)


MinBandWidth가 "-1"로 지정되면 모든 세션에 대해 최고 속도는 BandWidth나 LageFileLimit에서 지정한 속도가 나올 수 있게 됩니다.

BandWidth를 4096으로 지정하고 MinBandWidth가 -1이라면 동시에 지정된 호스트에서 몇개의 접속을 하더라도 각 세션의 속도는 4096Bytes/sec 까지 나오게 되는 것입니다.

profile
엮인글 :
List of Articles
번호 제목 글쓴이 날짜 추천 수 조회 수
156 웹서버용 IPTABE 설정 라이진 2014-06-24   1136
155 Internal Server Errorr 500 페이지 문구에서 확인 해야 할 것. 라이진 2014-06-24   1277
154 RSS Reader (wfx_rss.wfx) ini파일 RSS주소 라이진 2014-06-24   1204
153 사이트 이미지 무단링크막는법 .htaccess 라이진 2014-06-24   1036
152 우분투에서 log폴더를 삭제했을 경우 라이진 2014-06-24   1156
151 대용량 파일 첨부 업로드시 php.ini 파일조정값들 라이진 2014-06-24   1222
150 윈도우 2000 DNS 서버의 백업 및 복원 (Apache, PHP 설치문서 포함) 라이진 2014-06-24   1232
149 php.ini 옵션 설명 - short_open_tag = On, register_globals = On 라이진 2014-06-24   1286
» mod_bandwidth 설치, httpd.conf 파일설정 라이진 2014-06-24   1157
147 PrintWriter/BufferedReader/ObjectOutputStream/ObjectInputStream 간단한 예제 라이진 2014-06-24   917
146 자바 zip 파일로 압축 하는 소스 라이진 2014-06-24   1419
145 서버1대에서 여러 사이트만들때 (아파치 버츄얼호스트 설정법) 라이진 2014-06-24   1133
144 우분투 - VMWare Tool 설치방법 라이진 2014-06-24   1153
143 우분투 명령어 한줄로 서버 설치하기 라이진 2014-06-24   1001
142 (개발자분들을 위한 익스 호환성 태그) X-UA-Compatible Meta Tag Description and Uses: 라이진 2014-06-24   1384
141 쿨노보(크롬 플러스)의 종말? [1] 라이너스~ 2014-06-24   2067
140 워드프레스 실시간 작업 wjdgus1 2014-06-24   931
139 컴퓨터 그래픽스 운용 기능사 (Craftsman Computer Graphics Operation) ??? [1] 김태후 2014-06-24   1151
138 고수분들 혹시 인강 동영상 녹화방법 없을까요? file [2] 구자철 2014-06-24   4867
137 conf.d/other-vhosts-access-log: define 에러 감자칩 2014-06-22   931
서버에 요청 중입니다. 잠시만 기다려 주십시오...