글검색결과 [apache] : 2

  1. 2006/09/03 트레픽 제한
  2. 2006/08/31 mod_cband (6)

트레픽 제한

Category :: 서버들/Oper.or.kr


  몇일전 올린 포스팅에서 적용한 mod_cband 를 본격적으로 사용하기로 했습니다. 그에 따라 Oper.or.kr 에 계적이 있으신 분들은 virtualhost 를 사용하여야만 접근이 가능하며 (~계정 사용 불가) 하루 트레픽을 대충 어림잡아 지정해 보았습니다.
  트레픽 페이지는 http://도메인/traffic-status 를 이용하여 확인하실 수 있고 더 늘리거나 할 필요가 있을 시에는 이곳에 코멘트를 남기는 방식 등으로 전달하여 주시면 되겠습니다.
  트레픽 제한은 도메인 별로 하는 것이 아니라 사용자 별로 하는 것이니 만큼 /traffic-status 페이지에서 소유하고 계신 도메인의 각각의 사용량을 확인하실 수 있습니다.
2006/09/03 13:33 2006/09/03 13:33

mod_cband

Category :: 운영체제/FreeBSD


  서버로는 FreeBSD 만(동영상 스트리밍 제외)을 고집하고 있습니다. 이런 서버들은 특히 웹서버로 많이 이용되는데 대부분의 웹 서버들은 apache 1.3 을 사용하고 있습니다.
  저는 처음부터 apache 2.0 을 접한지라 1.3 에 대한 생소함 등등 때문에 사용해보지 않았습니다. 그러나 apache 1.3 에서 사용되는 것 중 부러운 것으로 mod_throttle 가 있었습니다. 가상 호스트 별로 트레픽 제한을 걸 수 있는 녀석입니다. +_+;
  최근 Oper.or.kr 서버에서 여차저차 아는 사람을 위주로 웹호스팅 처럼 계정을 주게 되었는데 제가 일일이 모니터링 할 수도 없고 로그만 보면서 트레픽 쓰는 서버를 찾는다는 것이 쉬운 것이 아닌 듯하여 특히나 더 간절했던 것 같습니다.
  그리하여 예전에 한번쯤 봤던 기억이 나서 검색엔진에서 찾아보니 mod_cband 라는 것이 있었습니다. 설명에 의하면 mod_cband 는 apache 2.x 에서만 사용이 가능하고, apache 1 에서의 mod_throttle 와 mod_bandwidth 와 비슷한 역할을 한다고 합니다. 사실 둘다 사용해보지 않아 저는 자세한 기능을 모르지만 사용해보신 여러분은 잘 아실 듯하니 믿고 넘어갑니다. (mod_throttle 는 트레픽 제한, mod_bandwidth 는 속도 제한의 역할을 한답니다.)

  FreeBSD 에 설치할 것이므로 우선 포트에 있는지 확인해 봤습니다.
<@HyperCube> ====> FreeBSD 포트  mod_cband-0.9.7.3  (www) <====
<@HyperCube> 분류: www  / 메인테이너: apache@FreeBSD.org
<@HyperCube> 등록: Wed Sep  7 19:53:52 2005
<@HyperCube> 설명: A per-virtualhost bandwidth limiter module for Apache 2

<@HyperCube> 검색된 포트가 없습니다. : mod_throttle

<@HyperCube> ====> FreeBSD 포트  mod_bandwidth-2.0.6  (www) <====
<@HyperCube> 분류: www  / 메인테이너: apache@FreeBSD.org
<@HyperCube> 등록: Thu Jul  3 15:13:45 2003
<@HyperCube> 설명: Bandwidth management module for the Apache webserver

  자 여기서 크게 상관은 없지만 apache 1 에서 사용되는 mod_throttle 은 FreeBSD ports 에 없다는 것을 보실 수 있는데 이건 아래의 사유로 포트 트리에서 삭제 되었기 때문이라고 합니다.
Per insistence of the author of this software, remove these ports from the Ports Collection. (제작자의 요청으로 인해, 이 포트를 포트 트리에서 삭제합니다.)

  우선 mod_cband 를 설치하도록 합니다.
# cd /usr/ports/www/mod_cband
# make install clean

  자 설치를 마쳤습니다. 의외로 간단하죠? 이제 httpd.conf 세팅을 해야됩니다. 저는 apache 2.0 을 사용하고 있으므로 /usr/local/etc/apache2/httpd.conf 에 위치하지만 apache22 등을 사용하실 경우에는 /usr/local/etc/apache22/httpd.conf 등을 참고하셔야 됩니다.
# cd /usr/local/etc/apache2
# vi httpd.conf

  우선 여기서 추가해줘야 될 것으로는 아래 세가지가 있습니다.
  1. CBand 가 적용된 모든 가상호스트들이 얼마나 트레픽을 사용하였는지 모니터링할 수 있는 관리자 페이지로, 아래에서는 /cband-status 로 연결했습니다.
  2. 현재 자신이 얼마만큼의 트레픽을 사용했는지 알 수 있는 확인 페이지로, 아래에서는 /cband-status-me 로 연결했습니다.
  3. VirtualHost 설정
  우선 추가해야될 1. 항목입니다.
<Location /cband-status>
   SetHandler cband-status
   Order deny,allow
   Deny from all
   Allow from Oper.oPer.opEr.opeR.or.kr
</Location>

  이건 2. 항목이고요.
<Location /cband-status-me>
   SetHandler cband-status-me
</Location>

  물론, 위의 두 항목에 대한 경로는 설정하시기 나름이고요. 이곳에 추가한다면 모두가 같은 설정을 적용받게 되니 <VirtualHost> 구문 안에 넣어서 사용하셔도 무방합니다. (예: <Location /traffic-me> 등)
  여기서 /cband-status 의 경우에는 Deny from all 로 기본적으로 모든 사용자의 접속을 차단해두고 Allow from 에서 지정한 IP 에서만의 접속을 허용하도록 되어있습니다. 하지만 우리 나라의 인터넷은 대부분 유동 IP 이고 계속 인터넷 접속이 되어있는 것도 아니니 IP 로 입력하는 것은 적절하지 않다고 봅니다. 그래서 저 같은 경우는 특정 VirtualHost 으로 접속할 때만 되도록 만들었습니다. (전 초보니 이부분은 다른 분들의 도움을 받아주세요.)

  이제 <VirtualHost> 구문을 아래와 비슷한 방식으로 설정합니다.
<VirtualHost *:80>
   ServerName oper.or.kr
   DocumentRoot /usr/local/www/data
   CBandLimit 300Mi
   CBandPeriod 1D
   CBandExceededURL http://oper.or.kr/cband/traffic_over.html
</VirtualHost>
  oper.or.kr 도메인에 대해 1일에 300Mbyte 의 트레픽을 허용하며 그 트레픽을 초과하면 http://oper.or.kr/cband/traffic_over.html 을 출력합니다.

  대부분 웹호스팅을 하거나 할 경우 한 사용자가 여러개의 도메인을 사용하는 경우가 많고, 그에 따라 여러개의 <VirtualHost> 를 가지게 되는 경우가 빈번합니다. 그럴 땐 어떻게 하느냐?
<CBandUser user>
   CBandUserLimit 300Mi
   CBandUserPeriod 1D
</CBandUser>
<VirtualHost *:80>
   ServerName oper.or.kr
   DocumentRoot /usr/local/www/data
   CBandUser user
</VirtualHost>
<VirtualHost *:80>
   ServerName ik.oper.or.kr
   DocumentRoot /usr/local/www/data
   CBandUser user
</VirtualHost>
  일종의 클래스 개념입니다. user 라는 클래서는 1일에 300Mbyte 의 전송량을 할당받고, oper.or.kr 과 ik.oper.or.kr 도메인이 user 클래스의 영향을 받는다는 구문입니다. CBandExceededURL 를 지정하지 않았기 때문에 트레픽을 초과하면 503 에러를 출력합니다.

  이 외에도 VirtualHost 별로 대역폭 설정 및 접속 IP 별로 대역폭 설정 등을 할 수 있지만, 그 부분은 다루지 않겠습니다. (왜냐? 역시 초보라..)
  설정을 다 하셨으면 apache 를 재시작해 주시고요. 이제 http://Domain/cband-status 와 http://Domain/cband-status-me 로 접속해 확인합니다. 물론 위에서 설정한 Domain 으로 접속해야겠죠?

  위 정보는 이곳에서 얻어왔습니다. 아래의 설정 값 역시 이곳에서.. ^^; (귀찮음?) 보다 자세한 것은 이곳을 한번 살펴보시고 해결이 안되신다면 코멘트로 질문 달아주시면 아는 것을 답변해 드리겠습니다.
1) 단위
  * 전송속도 단위
     o kbps, Mbps, Gbps - bits per second:1024, 1024*1024 , 1024*1024*1024 bps
     o kb/s, Mb/s, Gb/s - bytes persecond:  1024, 1024*1024, 1024*1024*1024 b/s
     o 기본 : kbps

  * 트래픽 쿼터 단위
     o K, M, G - bytes: 1000, 1000*1000,1000*1000*1000 bytes
     o Ki, Mi, Gi - bytes: 1024, 1024*1024,1024*1024*1024 bytes
     o 기본 : K

  * 시간(기간) 단위
     o S, M, H, D, W - 초, 분, 시간, 일, 주
     o 기본 : S

2) 지시자들
  (1) 이름 : CBandDefaultExceededURL
     설명 : 제한을 초과했을때보여줄 URL  (지정하지 않으면, 503 에러 페이지)
     문맥 : Serverconfig
      문법 :CBandDefaultExceededURL URL

  (2) 이름 : CBandDefaultExceededCode
     설명 : 제한을 초과했을시 보여줄 에러코드
     문맥 : Server config
     문법 :CBandDefaultExceededCode HTTP_CODE
     예제 :CBandDefaultExceededCode 509  

  (3) 이름 : CBandScoreFlushPeriod
     설명 : scoreboard 파일에기록할 요청수, mod_cband 의 성능에 영향을 준다.
     기본값 : 1
     문맥 : Server config
     문법 :CBandScoreFlushPeriod 요청수
     예제 :CBandScoreFlushPeriod 100  ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)

  (4) 이름 : CBandSpeed
     설명 : 가상호스트 도메인의 최대 속도,요청수, 접속수  설정
     문맥 :<Virtualhost>
     문법 : CBandSpeed kbpsrps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수
     예제 : CBandSpeed 102410 30
             최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.

  (5) 이름 : CBandRemoteSpeed
     설명 : 접속자(IP)의 최대속도,요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
     문맥 :<Virtualhost>
     문법 : CBandRemoteSpeedkbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당최대 요청수
             max_conn - 최대 동시 접속수
     예제 : CBandRemoteSpeed20kb/s 3 3
             접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.

  (6) 이름 : CBandClassRemoteSpeed
     설명 : 정의한 class(ip 범위)에대해 최대속도, 요청수, 접속수 제한
     문맥 :<Virtualhost>
     문법 :CBandClassRemoteSpeed class_name kbps rps
             class_name - 이미 정의한 클래스 이름 (IP범위)
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수
      예제 : <CBandClassgooglebot_class>
               CBandClassDst 66.249.64/24
               CBandClassDst 66.249.65/24
               CBandClassDst 66.249.79/24
             </CBandClass>
                   CBandClassRemoteSpeedgooglebot_class 20kb/s 2 3
                   위에서 정의한클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도, 초당 3개의 요청, 동시 접속 3개로 제한.

  (7) 이름 : CBandRandomPulse
     설명 : 속도 제한을 위해서 임의의파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
              부하가 많을때는 자동 Off된다.
     문맥 : Global
     문법 : CBandRandomPulseOn/Off

  (8) 이름 : CBandLimit
     설명 : 제한할 전송량을 설정한다.(기간은 CBandPeriod 에서 설정)
     문맥 :<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)로 제한한다.

  (9) 이름 : CBandClassLimit
     설명 : 정의한 class(ip범위)에대해 제한할 전송량 설정.
     문맥 :<Virtualhost>
     문법 : CBandClassLimitclass_name limit
             class_name - 이미 정의한 클래스 이름(ip범위)
             limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)

  (10) 이름 : CBandExceededURL
     설명 : 제한을 초과했을시 보여줄URL, 지정하지 않으면 503 에러 발생 (가상호스트에서)
     문맥 :<Virtualhost>
     문법 : CBandExceededURLURL

  (11) 이름 : CBandExceededSpeed
     설명 : 전송양을 초과했을시 , 전송속도제한 설정.
     문맥 :<Virtualhost>
     문법 :CBandExceededSpeed kbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수

  (12) 이름 : CBandScoreboard
     설명 : 가상호스트의 scoreboard파일 지정. (성능향상을 위해 필요)
     문맥 :<Virtualhost>
     문법 : CBandScoreboardpath
             (path는 아파치(www)권한으로 쓰기가능해야 함)

  (13) 이름 : CBandPeriod
     설명 : 용량제한기간(이 기간이 지나면,측정되었던 용량은 지워진다.)
     문맥 :<Virtualhost>
     문법 : CBandPeriod period
             period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
     예제 : CBandPeriod1W  (1주일)
             CBandPeriod 14D  (14일)
             CBandPeriod 60M  (60분)

  (14) 이름 : CBandPeriodSlice
     설명 : 기간이 길때는 나눌 기간을명시한다.
     기본값 : slice_len = limit
     문맥 :<Virtualhost>
     문법 : CBandPeriodSliceslice_length
     예제 : CBandLimit 100G
             CBandPeriod 4W
             CBandPeriodSlice 1W
              4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
              1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.

  (15) 이름 : <CBandUser>
     설명 : 새로운 cband 가상 사용자설정
     문맥 : Server config
     문법 : <CBandUseruser_name>

  (16) 이름 : CBandUserSpeed
     설명 : cband 가상 사용자의 속도,요청수, 동시 접속수 제한
     문맥 : <CBandUser>
     문법 : CBandUserSpeedkbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수
     예제 : CBandUserSpeed100kb/s 10 5

  (17) 이름 : CBandUserLimit
     설명 : cband 가상 사용자의 저송용량 제한.
     문맥 : <CBandUser>
     문법 : CBandUserLimitlimit
             limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
     예제 : CBandUserLimit 10M
             CBandUserLimit 10Mi

  (18) 이름 : CBandUserClassLimit
     설명 : cband 가상 사용자의 정의한class(ip범위)에 대해 제한할 전송량 설정
     문맥 : <CBandUser>
     문법 :CBandUserClassLimit class_name limit
             class_name - 지정한 class(IP범위)이름
             limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi),Gi (gibi)

  (19) 이름 : CBandUserExceededURL
     설명 : cband 가상 사용자의,제한을 초과했을시 보여줄 URL,
              지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
     문맥 : <CBandUser>
     문법 :CBandUserExceededURL URL

  (20) 이름 : CBandUserExceededSpeed
     설명 : cband 가상 사용자의,전송양을 초과했을시 , 전송속도 제한 설정.
     문맥 : <CBandUser>
     문법 :CBandUserExceededSpeed kbps rps max_conn
             kbps - 초당 최대 전송속도
             rps - 초당 최대 요청수
             max_conn - 최대 동시 접속수

  (21) 이름 : CBandUserScoreboard
     설명 : cband 가상 사용자의,scoreboard 파일 지정.
     문맥 : <CBandUser>
     문법 :CBandUserScoreboard path
             (path는 아파치(www)권한으로 쓰기가능해야 함)

  (22) 이름 : CBandUserPeriod
     설명 : cband 가상 사용자의,용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
     문맥 : <CBandUser>
     문법 : CBandUserPeriodperiod
             period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
     예제 : CBandUserPeriod 1W
             CBandUserPeriod 14D
             CBandUserPeriod 60M

  (23) 이름 : CBandUserPeriodSlice
     설명 : cband 가상 사용자의,기간을 나눌 기간 명시
     기본값 : slice_len = limit
     문맥 : <CBandUser>
     문법 :CBandUserPeriodSlice slice_length
     예제 : CBandUserLimit100G
             CBandUserPeriod 4W
             CBandUserPeriodSlice 1W
              4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
              1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.


## 참고문서
http://cband.linux.pl
http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling
http://www.superuser.co.kr/home/lecture/index.php?leccode=10588
2006/08/31 18:29 2006/08/31 18:29

 이전  1   다음