한국어

tc_backup

글쓴이: 티니 (2007년 01월 12일 오전 12:10) 읽은수: 817

--------------------------------------------------------------------------------------
- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]
- 작성일 : 2007-01-11
- 사이트 : http://linux.tini4u.net/
- 원제목 : 아파치 2.x 에서의 트래픽 제한
- 환 경 : CentOS 4.4, apache 2.2
- 키워드 : mod_cband
--------------------------------------------------------------------------------------
지난 강좌에서 아파치 1.x에서의 트래픽을 제한하는 모듈을 설명해 드렸습니다.
하지만 throttle 모듈은 아파치 1.x에서만 작동하기 때문에 아파치 2.x를 사용하시는 분들은
사용할 수 없다는 최대단점이 있습니다.
또한 최근엔 Legacy 딱지가 붙은 아파치 1.x보다는 최신버전인 아파치 2.x를 사용하시는 분들이
꽤 많기 때문에 그런 분들은 트래픽 제한을 하는데 있어 곤란함을 겪을 수 있습니다.
그렇지만 아파치 2.x에서도 트래픽을 제한할 수 있는 모듈이 있습니다. 바로 cband 모듈 인데요.
이 모듈은 throttle과 매우 흡사한 기능과 구조를 가지고 있지만, 트래픽을 제한하는 기능 말고도
또 한가지의 기능이 있습니다.
바로 대역폭을 제한하는 bandwidth 기능 입니다.
기존 아파치 1.x에서는 트래픽제한은 throttle 모듈을, 대역폭제한은 bandwidth 모듈을 이용했습니다.
그러나 아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.

1. mod_cband 설치 (최신버전: http://cband.linux.pl/)
[root@localhost]# wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
[root@localhost]# tar xfz mod-cband-0.9.7.5.tgz
[root@localhost]# cd mod-cband-0.9.7.5
[root@localhost]# ./configure --with-apxs=/usr/sbin/apxs
[root@localhost]# make
[root@localhost]# make install


2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
[root@localhost]# vi /etc/httpd/conf/httpd.conf
<IfModule mod_cband.c>
   <Location /cband-status>
       SetHandler cband-status
       Order Deny,Allow
       Deny from All
       Allow from 127.0.0.1 100.100.100.100
   </Location>

   <Location /cband-me>
       SetHandler cband-status-me
       Order deny,allow
       Deny from all
       Allow from all
   </Location>
</IfModule>


※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.

3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
※ 각각의 호스트에 따로따로 설정해줄 때
<VirtualHost 192.168.0.1>
   ServerName foobar.com
   ServerAlias www.foobar.com
   DocumentRoot /home/foobar/public_html
   ErrorLog logs/foobar-err
   CustomLog logs/foobar-acc combined
   CBandLimit 100Mi
   CBandPeriod 1D
</VirtualHost>


※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.

※ 하나의 유저(foobar)가 여러개의 호스트를 사용하고 있는 경우 (트래픽 공유)
<CBandUser foobar>
   CBandUserLimit 100Mi
   CBandUserPeriod 1D
</CBandUser>

<VirtualHost 192.168.0.1>
   ServerName foobar.com
   ServerAlias www.foobar.com
   DocumentRoot /home/foobar/public_html
   ErrorLog logs/foobar-err
   CustomLog logs/foobar-acc combined
   CBandUser foobar
</VirtualHost>

<VirtualHost 192.168.0.1>
   ServerName foobar2.com
   ServerAlias www.foobar2.com
   DocumentRoot /home/foobar2/public_html
   ErrorLog logs/foobar2-err
   CustomLog logs/foobar2-acc combined
   CBandUser foobar
</VirtualHost>


※ 위 설정은 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를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
[root@localhost]# vi /etc/httpd/conf/httpd.conf
<IfModule mod_cband.c>
   <Location /cband-status>
       SetHandler cband-status
       AuthName "트래픽관리 페이지"
       AuthType Basic
       AuthUserFile /home/foobar/.htpasswd
       require valid-user
   </Location>

   <Location /cband-me>
       SetHandler cband-status-me
       Order deny,allow
       Deny from all
       Allow from all
   </Location>
</IfModule>
[root@localhost]# htpasswd -c /home/foobar/.htpasswd ID

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=44
조회 수 :
11373
등록일 :
2008.04.06
21:54:05 (*.234.246.12)
엮인글 :
http://www.rain9.com/xe/tc_backup/2359/b8a/trackback
게시글 주소 :
http://www.rain9.com/xe/tc_backup/2359
List of Articles
번호 제목 글쓴이 날짜 조회 수
80 Linux 아파치 DoS 방어 엔신 2008-04-06 28605
79 Linux 리눅스에서 text 인코딩 한꺼번에 바꾸기 엔신 2008-04-06 11723
» Linux 아파치 2.x 에서의 트래픽 제한 엔신 2008-04-06 11373
77 Linux mod_cband 제한 관련내용 엔신 2008-04-06 9089
76 Linux lighttpd + php fastcgi + xcache 설치하기 엔신 2008-04-06 13486
75 Linux HowTo: Setup Lighttpd + PHP + eAccelerator 엔신 2008-04-06 18831
74 Linux RRDTool 엔신 2008-04-06 17087
73 Linux CentOS (Redhat Enterprise)에서 lighttpd 설치 엔신 2008-04-06 16898
72 Linux lighttpd 웹서버설치 엔신 2008-04-06 9882
71 Linux SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n [1] 엔신 2008-04-06 18302
70 Programming 입력 받을때 주의 엔신 2008-04-06 11117
69 Linux mod_security를 통한 방화벽구축 엔신 2008-04-05 19668
68 Security 키사 엔신 2008-04-02 8279
67 Linux 하나의 계정에 여러개 도메인 포워딩하여 각각 사이트 구현하기 엔신 2008-04-01 13026
66 Security 보안서버구축가이드_v10(초안) file 엔신 2008-03-25 9709
65 Linux 검색로봇을 막는 방법 robots.txt 엔신 2008-03-24 14710
64 Linux [apache] 검색로봇 차단법 엔신 2008-03-24 22278
63 DBMS show variables 변경하기 5.0 기준 서버 변수 변경하기 엔신 2008-03-21 17556
62 파일내 문자열 검색(find, xargs) 엔신 2008-03-15 13037
61 Linux 사랑비 설치시 테이블 생성 실패 [2] 엔신 2008-03-14 13907