Apache 1.x 버전에서는 아래와 같이 mod_throttle 모듈과 mod_bandwidth 모듈을 통해 트래픽 제어를 할 수 있었다.
Apache + Throttle(mod_throttle) 을 이용해서 트래픽정보를 구합니다.
[Throttle Status]
http://자신의도메인/throttle-me
실시간으로 볼 수 있으며 자신의 일일 트래픽량이 증가시 웹서버에서 Throttle 연동해 있기 때문에 초과시 자동적으
로 트래픽량 초과 안내 페이지가 나오면 일일 트래픽량으로 제한이므로 하루가 지나면 다시 초기화로 다시 계산해서
그 정보가 계산됩니다.
% - 허용된 트래픽에서 몇퍼센트를 사용
Hits - 도메인의 히트수
Refused - 트래픽이 초과하였을때 접속하여 요청거부된 횟수
KBytes Sents - 회원님의 도메인 트래픽량
KBytes Per Hits - 한 히트당 트래픽량의 평균치
Polocy - Volume 트래픽 제한을 양으로 계산
Limits - 트래픽 제한양 제한선 입니다.
Period - 1d 하루 24시간을 기준으로 트래픽을 계산한다는 뜻입니다.
Period Elapsed - 24시간중 소요된 시간
Idle time - 최종 히트후 요청 대기시간
참조 사이트 : http://www.snert.com/Software/mod_throttle/
##############
## 설치하기 ##
##############
일반적으로 아파치에서 mod_throttle 을 연동하기 위해서는 2가지 방식의 컴파일을 지원하지만 여기서는
DSO 방식으로 설치하도록 한다.
---------------------------------------------------------------------
STATIC 방식 (APACHE mod_throttle 부분)
./configure --disable-shared=throttle
--add-module=/usr/local/mod_throttle-3.1/mod_throttle.c
---------------------------------------------------------------------
DSO 방식
cd /usr/local/mod_throttle-3.1
make install
mod_throttle.so를 apache디렉토리 libexec안에 복사해줍니다.
그런후 httpd.conf에 mod_throttle부분을 수정.
(compile시 apxs에 위치를 Makefile안에 전체경로로 변경후 make하세요.)
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
---------------------------------------------------------------------
아파치에서 mod_throttle 을 설치하기 위한 순서
1. 다운로드
2. 컴파일 / 설치
3. apache 설정파일 내부에서의 mod_throttle 부분을 인식
4. 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
5. 트래픽확인
■ 다운로드
[root@www download]# wget http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
[root@www download]# tar xzf mod_throttle312.tgz
[root@www download]# cd mod_throttle-3.1.2/
[root@www mod_throttle-3.1.2]# ll
total 188
-rw-r--r-- 1 111 users 7233 Dec 3 2000 CHANGES.txt
drwxr-xr-x 2 111 users 4096 Dec 2 2000 Img
-rw-r--r-- 1 111 users 1525 Dec 2 2000 LICENSE.txt
-rw-r--r-- 1 111 users 1009 Dec 2 2000 Makefile
-rw-r--r-- 1 111 users 26492 Dec 3 2000 index.shtml
-rw-r--r-- 1 111 users 97711 Dec 3 2000 mod_throttle.c
-rw-r--r-- 1 111 users 277 Dec 2 2000 patch.proxy_util.c
-rw-r--r-- 1 111 users 4 Dec 3 2000 version3.cnt
■ 컴파일 / 설치
[root@www mod_throttle-3.1.2]# make install
apxs -c mod_throttle.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -fpic -DSHARED_MODULE -
I/usr/local/apache2/include -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o
apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache2/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache2/libexec/mod_throttle.so
chmod 755 /usr/local/apache2/libexec/mod_throttle.so
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
cp /usr/local/apache2/conf/httpd.conf.new /usr/local/apache2/conf/httpd.conf
rm /usr/local/apache2/conf/httpd.conf.new
root@www mod_throttle-3.1.2]# apachectl restart
■ apache 설정파일 내부에서의 mod_throttle 부분을 인식
<IfModule mod_throttle.c>
# 트래픽이 초과되면 나오는 에러페이지
ErrorDocument 503 http://192.168.1.1/error/error.html
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
Deny from all
# 다른접근을 모두 거부하고 특정 아이피에서만 throttle-status 를 확인 하도록 설정
# 여기서는 192.168.1.1 과 192.168.1.2 의 IP 주소만 접근할 수 있다.
Allow from 192.168.1.1
Allow from 192.168.1.2
</Location>
<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me
</Location>
</IfModule>
■ 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
트래픽을 걸때의 여러가지 방법이 존재한다.
ThrottlePolicy Volume 100M 1d //하루 100M
ThrottlePolicy Request 1000 1d //하루 천번
ThrottleClientIP 1100 volume 2 10 //로그 1100k
<VirtualHost 192.168.1.1>
ServerName test1.com
DocumentRoot /home/test1/pubic_html
# 전송량 1일 300M
ThrottlePolicy Volume 300M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test2.com
DocumentRoot /home/test2/public_html
ServerName test2.com
# 전송량 1일 400M
ThrottlePolicy Volume 400M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test3.org
DocumentRoot /home/test3/public_html
ServerName test3.org
# 전송량 1일 500M
ThrottlePolicy Volume 500M 1d
</VirtualHost>
■ 트래픽확인
1. 첫번째방법은 자신의 트래픽만 보는 방법 ( 일반 사용자인 경우 )
http://자신의도메인/throttle-me
2. 두번째방법은 모든 가상호스트를 보는 방법 ( 관리자인 경우 )
( ※ 중요!!! 이때는 아무나 접근할 수 없도록 접근 IP 막는 조치를 취해야 한다. 그렇지 않으면 모든 사용자의
정보를 다른 사용자가 볼 수도 있고 트래픽을 초기화 할 수도 있다. )
http://자신의도메인/throttle-status
하지만, Apache2로 넘어오면서 mod_throttle 모듈이나 mod_bandwidth 모듈을 더 이상 사용할 수 없게 된다.
대신 mod_cband 모듈이라는 걸출한 녀석을 사용할 수 있다. mod_cband 모듈을 통해 트래픽 제한과 대역폭 제한, 그리고 트래픽 제한 결과 등을 웹을 통해 확인할 수 있게 된다.
Debian에서는 libapache2-mod-cband 패키지가 있으므로, 소스 컴파일할 필요 없이 패키지를 설치하면 된다. 현재 libapache2-mod-cband 패키지의 mod_cband 모듈 버전은 0.9.7.4 이다.
만약 최신 버전을 설치하고 싶다면, 소스 파일을 구해 컴파일하면 된다.
mod_cband 개발자 홈페이지는 http://cband.linux.pl/ 이라고 알고 있는데, 이상하게 접속이 되지 않는다.
그래서 다른 경로(http://www.sfr-fresh.com/)를 통해 mod_cband 0.9.7.5 소스 파일을 구하였다.
설치 방법은 간단하다.
우선, 소스 파일을 구한 다음
컴파일이 성공적으로 마친 후에는 아파치 설정 파일을 수정할려고 하는데, 데비안에서는 아파치 설정 파일이 /etc/apache2/apache.conf 로 되어 있기 때문에 에러가 난다. 만약 mod_cband 모듈을 패키지로 설치하지 않고 소스 파일을 컴파일해서 설치한 경우라면 설정 파일은 직접 만들어줘야 한다.
설정 파일을 만들 때, /etc/apache2/apache.conf 에 저장할 수도 있겠지만, mods-avaiable 디렉토리에 개별 파일로 만들어두는 것이 더 유용할 것이다. 이때 만들어줘야 하는 파일은 설정 파일과 로드 파일 2개이다.
이렇게 2개의 파일은 만든 후에 /etc/apache2/mods-enabled 디렉토리 내에 소프트 링크를 걸어주자.
이제부터 Apache를 통해 전송되는 트래픽은 설정에 맞춰 제한될 것이다. 다양한 설정 방법이 있으니 자신에게 맞도록 적절히 수정해주면 될 것이다.
mod_cband 모듈에 의해 Apache2의 성능 저하를 막기 위해 아래 설정을 cband.conf 설정 파일에 추가해주도록 하자.
CBandScoreFlushPeriod 지시자는 현재 대역폭 상태를 Scoreboard 파일에 저장하는 간격을 지정해주는 것인데, 기본값은 1 이다. 즉, 이 말은 매 요청마다 현재 대역폭 상태를 Scoreboard 파일에 저장하기 때문에 성능을 저하시키는 원인이 된다.
CBandRandomPulse 지시자의 경우 On 으로 설정해놓으면 mod_cband 모듈에서 전송 속도 제한을 위해 임의의 파형을 만들어 이에 따라 제한하고 부하가 많은 때는 자동으로 적용시키지 않게 된다. 기본값은 On 으로 이 설정을 사용하면 전송 속도 제한을 위해 임의의 파형을 만드느라 성능을 저하시킬 수도 있다. 이를 Off 로 설정해서 성능 저하를 최대한 막도록 하자.
아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.
1. mod_cband 설치 (최신버전: http://cband.linux.pl/)
http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/
[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# make install
2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.
3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.
※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.
4. cband 단위
- 전송속도 단위
- 트래픽 제한 단위
- 시간 단위
5. cband 지시자
6. 통계화면 보기
관리자모드 - http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml
7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
참고 자료
Apache + Throttle(mod_throttle) 을 이용해서 트래픽정보를 구합니다.
[Throttle Status]
http://자신의도메인/throttle-me
실시간으로 볼 수 있으며 자신의 일일 트래픽량이 증가시 웹서버에서 Throttle 연동해 있기 때문에 초과시 자동적으
로 트래픽량 초과 안내 페이지가 나오면 일일 트래픽량으로 제한이므로 하루가 지나면 다시 초기화로 다시 계산해서
그 정보가 계산됩니다.
% - 허용된 트래픽에서 몇퍼센트를 사용
Hits - 도메인의 히트수
Refused - 트래픽이 초과하였을때 접속하여 요청거부된 횟수
KBytes Sents - 회원님의 도메인 트래픽량
KBytes Per Hits - 한 히트당 트래픽량의 평균치
Polocy - Volume 트래픽 제한을 양으로 계산
Limits - 트래픽 제한양 제한선 입니다.
Period - 1d 하루 24시간을 기준으로 트래픽을 계산한다는 뜻입니다.
Period Elapsed - 24시간중 소요된 시간
Idle time - 최종 히트후 요청 대기시간
참조 사이트 : http://www.snert.com/Software/mod_throttle/
##############
## 설치하기 ##
##############
일반적으로 아파치에서 mod_throttle 을 연동하기 위해서는 2가지 방식의 컴파일을 지원하지만 여기서는
DSO 방식으로 설치하도록 한다.
---------------------------------------------------------------------
STATIC 방식 (APACHE mod_throttle 부분)
./configure --disable-shared=throttle
--add-module=/usr/local/mod_throttle-3.1/mod_throttle.c
---------------------------------------------------------------------
DSO 방식
cd /usr/local/mod_throttle-3.1
make install
mod_throttle.so를 apache디렉토리 libexec안에 복사해줍니다.
그런후 httpd.conf에 mod_throttle부분을 수정.
(compile시 apxs에 위치를 Makefile안에 전체경로로 변경후 make하세요.)
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
---------------------------------------------------------------------
아파치에서 mod_throttle 을 설치하기 위한 순서
1. 다운로드
2. 컴파일 / 설치
3. apache 설정파일 내부에서의 mod_throttle 부분을 인식
4. 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
5. 트래픽확인
■ 다운로드
[root@www download]# wget http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
[root@www download]# tar xzf mod_throttle312.tgz
[root@www download]# cd mod_throttle-3.1.2/
[root@www mod_throttle-3.1.2]# ll
total 188
-rw-r--r-- 1 111 users 7233 Dec 3 2000 CHANGES.txt
drwxr-xr-x 2 111 users 4096 Dec 2 2000 Img
-rw-r--r-- 1 111 users 1525 Dec 2 2000 LICENSE.txt
-rw-r--r-- 1 111 users 1009 Dec 2 2000 Makefile
-rw-r--r-- 1 111 users 26492 Dec 3 2000 index.shtml
-rw-r--r-- 1 111 users 97711 Dec 3 2000 mod_throttle.c
-rw-r--r-- 1 111 users 277 Dec 2 2000 patch.proxy_util.c
-rw-r--r-- 1 111 users 4 Dec 3 2000 version3.cnt
■ 컴파일 / 설치
[root@www mod_throttle-3.1.2]# make install
apxs -c mod_throttle.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -fpic -DSHARED_MODULE -
I/usr/local/apache2/include -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o
apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache2/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache2/libexec/mod_throttle.so
chmod 755 /usr/local/apache2/libexec/mod_throttle.so
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
cp /usr/local/apache2/conf/httpd.conf.new /usr/local/apache2/conf/httpd.conf
rm /usr/local/apache2/conf/httpd.conf.new
root@www mod_throttle-3.1.2]# apachectl restart
■ apache 설정파일 내부에서의 mod_throttle 부분을 인식
<IfModule mod_throttle.c>
# 트래픽이 초과되면 나오는 에러페이지
ErrorDocument 503 http://192.168.1.1/error/error.html
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
Deny from all
# 다른접근을 모두 거부하고 특정 아이피에서만 throttle-status 를 확인 하도록 설정
# 여기서는 192.168.1.1 과 192.168.1.2 의 IP 주소만 접근할 수 있다.
Allow from 192.168.1.1
Allow from 192.168.1.2
</Location>
<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me
</Location>
</IfModule>
■ 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
트래픽을 걸때의 여러가지 방법이 존재한다.
ThrottlePolicy Volume 100M 1d //하루 100M
ThrottlePolicy Request 1000 1d //하루 천번
ThrottleClientIP 1100 volume 2 10 //로그 1100k
<VirtualHost 192.168.1.1>
ServerName test1.com
DocumentRoot /home/test1/pubic_html
# 전송량 1일 300M
ThrottlePolicy Volume 300M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test2.com
DocumentRoot /home/test2/public_html
ServerName test2.com
# 전송량 1일 400M
ThrottlePolicy Volume 400M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerAdmin webmaster at test3.org
DocumentRoot /home/test3/public_html
ServerName test3.org
# 전송량 1일 500M
ThrottlePolicy Volume 500M 1d
</VirtualHost>
■ 트래픽확인
1. 첫번째방법은 자신의 트래픽만 보는 방법 ( 일반 사용자인 경우 )
http://자신의도메인/throttle-me
2. 두번째방법은 모든 가상호스트를 보는 방법 ( 관리자인 경우 )
( ※ 중요!!! 이때는 아무나 접근할 수 없도록 접근 IP 막는 조치를 취해야 한다. 그렇지 않으면 모든 사용자의
정보를 다른 사용자가 볼 수도 있고 트래픽을 초기화 할 수도 있다. )
http://자신의도메인/throttle-status
하지만, Apache2로 넘어오면서 mod_throttle 모듈이나 mod_bandwidth 모듈을 더 이상 사용할 수 없게 된다.
대신 mod_cband 모듈이라는 걸출한 녀석을 사용할 수 있다. mod_cband 모듈을 통해 트래픽 제한과 대역폭 제한, 그리고 트래픽 제한 결과 등을 웹을 통해 확인할 수 있게 된다.
Debian에서는 libapache2-mod-cband 패키지가 있으므로, 소스 컴파일할 필요 없이 패키지를 설치하면 된다. 현재 libapache2-mod-cband 패키지의 mod_cband 모듈 버전은 0.9.7.4 이다.
# apt-get install libapache2-mod-cband
만약 최신 버전을 설치하고 싶다면, 소스 파일을 구해 컴파일하면 된다.
mod_cband 개발자 홈페이지는 http://cband.linux.pl/ 이라고 알고 있는데, 이상하게 접속이 되지 않는다.
그래서 다른 경로(http://www.sfr-fresh.com/)를 통해 mod_cband 0.9.7.5 소스 파일을 구하였다.
설치 방법은 간단하다.
우선, 소스 파일을 구한 다음
# tar zxf mod-cband-0.9.7.5.tgz
# cd mod-cband-0.9.7.5
# ./configure --with-apxs=/usr/bin/apxs2
# make
# make install
/usr/bin/apxs2 -Wc,-Wall -Wc,-DDST_CLASS=3 -i -a -n cband src/mod_cband.la
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' src/mod_cband.la /usr/lib/apache2/modules
/usr/share/apr-1.0/build/libtool --mode=install cp src/mod_cband.la /usr/lib/apache2/modules/
cp src/.libs/mod_cband.so /usr/lib/apache2/modules/mod_cband.so
cp src/.libs/mod_cband.lai /usr/lib/apache2/modules/mod_cband.la
PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/lib/apache2/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 644 /usr/lib/apache2/modules/mod_cband.so
apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule' directive already has to exist..
make: *** [install] Error 1
# cd mod-cband-0.9.7.5
# ./configure --with-apxs=/usr/bin/apxs2
# make
# make install
/usr/bin/apxs2 -Wc,-Wall -Wc,-DDST_CLASS=3 -i -a -n cband src/mod_cband.la
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' src/mod_cband.la /usr/lib/apache2/modules
/usr/share/apr-1.0/build/libtool --mode=install cp src/mod_cband.la /usr/lib/apache2/modules/
cp src/.libs/mod_cband.so /usr/lib/apache2/modules/mod_cband.so
cp src/.libs/mod_cband.lai /usr/lib/apache2/modules/mod_cband.la
PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/lib/apache2/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 644 /usr/lib/apache2/modules/mod_cband.so
apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule' directive already has to exist..
make: *** [install] Error 1
컴파일이 성공적으로 마친 후에는 아파치 설정 파일을 수정할려고 하는데, 데비안에서는 아파치 설정 파일이 /etc/apache2/apache.conf 로 되어 있기 때문에 에러가 난다. 만약 mod_cband 모듈을 패키지로 설치하지 않고 소스 파일을 컴파일해서 설치한 경우라면 설정 파일은 직접 만들어줘야 한다.
설정 파일을 만들 때, /etc/apache2/apache.conf 에 저장할 수도 있겠지만, mods-avaiable 디렉토리에 개별 파일로 만들어두는 것이 더 유용할 것이다. 이때 만들어줘야 하는 파일은 설정 파일과 로드 파일 2개이다.
# file /etc/apache2/mods-available/cband.load
LoadModule cband_module /usr/lib/apache2/modules/mod_cband.so
LoadModule cband_module /usr/lib/apache2/modules/mod_cband.so
# file /etc/apache2/mods-available/cband.conf
<IfModule mod_cband.c>
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
</IfModule>
<IfModule mod_cband.c>
<Location /cband-status>
SetHandler cband-status
</Location>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
</IfModule>
이렇게 2개의 파일은 만든 후에 /etc/apache2/mods-enabled 디렉토리 내에 소프트 링크를 걸어주자.
# ln -s ../mods-available/cband.load ./
# ln -s ../mods-available/cband.conf ./
# /etc/init.d/apache2 restart
# ln -s ../mods-available/cband.conf ./
# /etc/init.d/apache2 restart
이제부터 Apache를 통해 전송되는 트래픽은 설정에 맞춰 제한될 것이다. 다양한 설정 방법이 있으니 자신에게 맞도록 적절히 수정해주면 될 것이다.
<IfModule mod_cband.c>
CBandSpeed 12Mbps 0 0
CBandRemoteSpeed 800kbps 0 0
<Location /cband-status>
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
</Location>
<Location /cband-status-me>
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
</Location>
</IfModule>
CBandSpeed 12Mbps 0 0
CBandRemoteSpeed 800kbps 0 0
<Location /cband-status>
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
</Location>
<Location /cband-status-me>
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
</Location>
</IfModule>
mod_cband 모듈에 의해 Apache2의 성능 저하를 막기 위해 아래 설정을 cband.conf 설정 파일에 추가해주도록 하자.
CBandScoreFlushPeriod 500
CBandRandomPulse Off
CBandRandomPulse Off
CBandScoreFlushPeriod 지시자는 현재 대역폭 상태를 Scoreboard 파일에 저장하는 간격을 지정해주는 것인데, 기본값은 1 이다. 즉, 이 말은 매 요청마다 현재 대역폭 상태를 Scoreboard 파일에 저장하기 때문에 성능을 저하시키는 원인이 된다.
CBandRandomPulse 지시자의 경우 On 으로 설정해놓으면 mod_cband 모듈에서 전송 속도 제한을 위해 임의의 파형을 만들어 이에 따라 제한하고 부하가 많은 때는 자동으로 적용시키지 않게 된다. 기본값은 On 으로 이 설정을 사용하면 전송 속도 제한을 위해 임의의 파형을 만드느라 성능을 저하시킬 수도 있다. 이를 Off 로 설정해서 성능 저하를 최대한 막도록 하자.
아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.
1. mod_cband 설치 (최신버전: http://cband.linux.pl/)
http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/
[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# make install
2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
|
※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.
3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
|
※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.
|
※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.
4. cband 단위
- 전송속도 단위
kbps, Mbps, Gbps - bits per second, 의미: 1024, 1024*1024, 1024*1024*1024 bps kb/s, Mb/s, Gb/s - bytes per second, 의미: 1024, 1024*1024, 1024*1024*1024 b/s 기본값 : kbps |
- 트래픽 제한 단위
K, M, G - bytes, 의미: 1000, 1000*1000, 1000*1000*1000 bytes Ki, Mi, Gi - bytes, 의미: 1024, 1024*1024, 1024*1024*1024 bytes 기본값: K |
- 시간 단위
S, M, H, D, W - 초, 분, 시간, 일, 주. 의미: 1, 60, 3600, 86400, 604800 Seconds 기본값: S |
5. cband 지시자
이름: CBandDefaultExceededURL 설명: 제한을 초과했을때 보여줄 URL 문맥: Server config 문법: CBandDefaultExceededURL [URL] 예제: CBandDefaultExceededURL http://foobar.com/503.html |
이름: CBandDefaultExceededCode 설명: 제한을 초과했을시 보여줄 에러 코드 문맥: Server config 문법: CBandDefaultExceededCode [HTTP_CODE] 예제: CBandDefaultExceededCode 509 |
이름: CBandScoreFlushPeriod 설명: scoreboard 파일에 기록할 요청수를 정하나, cband 퍼포먼스에 영향을 미칩니다. 기본값: 1 문맥: Server config 문법: CBandScoreFlushPeriod [요청수] 예제: CBandScoreFlushPeriod 100 100번의 요청이 들어오면 scoreboard 파일에 한번 기록합니다. |
이름: CBandSpeed 설명: 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정 문맥: <Virtualhost> 문법: CBandSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: CBandSpeed 1024 10 30 호스트에 대해 1024kbps 전송속도로 제한하며, 초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다. |
이름: CBandRemoteSpeed 설명: 호스트 접속자의 최대속도, 요청수, 접속수 제한 문맥: <Virtualhost> 문법: CBandRemoteSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: CBandRemoteSpeed 20kb/s 3 3 호스트 접속자에 대해 1024kbps 전송속도로 제한하며, 초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다. |
이름: CBandClassRemoteSpeed 설명: IP class의 최대속도, 요청수, 접속수 제한 문맥: <Virtualhost> 문법: CBandClassRemoteSpeed [class_name] [kbps] [rps] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: <CBandClass googlebot_class> CBandClassDst 66.249.64/24 CBandClassDst 66.249.65/24 CBandClassDst 66.249.79/24 </CBandClass> CBandClassRemoteSpeed googlebot_class 20kb/s 2 3 googlebot_class 클래스에 대해 20kb/s 전송속도로 제한하며, 초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다. |
이름: CBandRandomPulse 설명: 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 방법입니다. 문맥: Global 문법: CBandRandomPulse [On/Off] 예제: CBandRandomPulse On |
이름: CBandLimit 설명: 제한할 전송량을 설정한다. 문맥: <Virtualhost> 문법: CBandLimit [limit] limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) 예제: CBandLimit 10M 전송량을 10M(10*1000*1000bytes)로 제한한다. CBandLimit 10Mi 전송량을 10M(10*1024*1024bytes)로 제한한다. |
이름: CBandClassLimit 설명: IP class에 대해 제한할 전송량 설정 문맥: <Virtualhost> 문법: CBandClassLimit [class_name limit] class_name - 클래스 이름 limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) |
이름: CBandExceededURL 설명: 제한을 초과했을때 보여줄 URL 문맥: <Virtualhost> 문법: CBandExceededURL [URL] 예제: CBandExceededURL http://foobar.com/503.html |
이름 : CBandExceededSpeed 설명: 전송량을 초과했을때의 전송속도 제한 설정 문맥: <Virtualhost> 문법: CBandExceededSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 |
이름: CBandScoreboard 설명: 가상호스트의 scoreboard 파일 지정 문맥: <Virtualhost> 문법: CBandScoreboard [path] |
이름: CBandPeriod 설명: 제한기간 문맥: <Virtualhost> 문법: CBandPeriod [period] period - 사용단위: S(초), M(분), H(시간), D(일), W(주) 예제: CBandPeriod 1D |
이름 : CBandPeriodSlice 설명: 기간을 나눌 기간 명시 기본값: slice_len = limit 문법: CBandPeriodSlice [slice_length] 예제: CBandLimit 100G CBandPeriod 4W CBandPeriodSlice 1W 지정된 제한값을 1주일 단위로 나누어 사용 합니다. 위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다. |
이름: <CBandUser> 설명: 새로운 cband 가상 사용자 설정 문맥: Server config 문법: <CBandUser user_name> |
이름: CBandUserSpeed 설명: cband 가상 사용자의 속도, 요청수, 동시 접속수 제한 문맥: <CBandUser> 문법: CBandUserSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 예제: CBandUserSpeed 100kb/s 10 5 |
이름: CBandUserLimit 설명: cband 가상 사용자의 전송 용량 제한 문맥: <CBandUser> 문법: CBandUserLimit [limit] limit - 사용용량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) 예제: CBandUserLimit 10M 전송량을 10M(10*1000*1000bytes)로 제한한다. CBandUserLimit 10Mi 전송량을 10M(10*1024*1024bytes)로 제한한다. |
이름: CBandUserClassLimit 설명: cband 가상 사용자의 IP class에 대해 제한할 전송량 설정 문맥: <CBandUser> 문법: CBandUserClassLimit [class_name] [limit] class_name - 클래스 이름 limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi) |
이름 : CBandUserExceededURL 설명: cband 가상 사용자의 제한을 초과했을때 보여줄 URL 문맥: <CBandUser> 문법: CBandUserExceededURL URL 예제: CBandDefaultExceededURL http://foobar.com/503.html |
이름: CBandUserExceededSpeed 설명: cband 가상 사용자의 전송량을 초과했을때의 전송속도 제한 설정 문맥: <CBandUser> 문법: CBandUserExceededSpeed [kbps] [rps] [max_conn] kbps - 초당 최대 전송속도 rps - 초당 최대 요청수 max_conn - 최대 동시 접속수 |
이름: CBandUserScoreboard 설명: cband 가상 사용자의 scoreboard 파일 지정 문맥: <CBandUser> 문법: CBandUserScoreboard [path] |
이름: CBandUserPeriod 설명: cband 가상 사용자의 제한기간 문맥: <CBandUser> 문법: CBandUserPeriod [period] period - 사용단위: S(초), M(분), H(시간), D(일), W(주) 예제: CBandPeriod 1D |
이름: CBandUserPeriodSlice 설명: cband 가상 사용자의 기간을 나눌 기간 명시 기본값: slice_len = limit 문맥: <CBandUser> 문법: CBandUserPeriodSlice [slice_length] 예제: CBandLimit 100G CBandPeriod 4W CBandPeriodSlice 1W 지정된 제한값을 1주일 단위로 나누어 사용 합니다. 위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다. |
6. 통계화면 보기
관리자모드 - http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml
7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
|
참고 자료
- mod_cband 사용법
- 아파치 2.X 버전에서 mod_cband를 이용한 트래픽관리
- apache2 트래픽 관리 mod_cband
- 출처 : http://mooo.org/
728x90
댓글