안녕하세요
Throttle강좌를 시작하겠습니다
초보자 분들은, Throttle모듈을 설치하기시가 어려우실 거에요.
저또한 그랬구요.
오늘 과감하게 저의 허접?비법을 여러분과 함께 공유할까 합니다.
일단 Throttle의 공식 싸이트를 가셔서 한번 둘러 보세요
주소는 http://www.snert.com/Software/mod_throttle/ 이랍니다.
Throttle은 서버의 트래픽 설정을 가능하게 해주는 것입니다.
웹호스팅을 하시는 분에게는 편리한 놈이랍니다.
웹호스팅 사이트를 돌아다니다보면
" 일일트래픽 500M , 혹은 일일 히트수 1000 히트 제한 "
이런 글을 볼 수 있습니다.
저런것은 보통의 경우 throttle을 많이 사용하더군요.
이제 슬슬 설치하여 볼까요?
차례를 살펴보면~~
-------------------------------------------------------------------
0. 아파치 설치하기
1. 아파치 설치방법(1)
1-1.아파치를 DSO으로 설치하기
1-2.아파치를 DSO로 설치하였을 경우 throttle을 설치하는 방법
2. 아파치 설치방법(2)
2-1.아파치를 static으로로 설치
2-2.아파치를 static으로 설치하였을 경우 throttle을 설치하는 방법
3.아파치의 httpd.conf설정하기
------------------------------------------------------------------
(아파치, PHP, Mysql, throttle을 설치하는 모습을 보여주면 좋겠지만, 저러한 것들은 다른 글을 참고하세요.)
저는 PHP와 throttle을 설치하는 방법만을 알려드릴께요.
(여기서 너무 자세한 설명은 불가능 하므로, 도중도중 모르시는 부분은 http://kldp.org 혹은 http://linux-sarang.net 혹은)
(http://phpschool.com에서 문의하시기 바랍니다.)
0. 아파치 설치하기
우선 아파치를 받아옵니다
그런데 throttle은 아파치 1.3.x만을 지원하므로, 1.3.x버젼을 받도록 합니다.(2.0버젼은 아직까지 지원을 하지 않더군요)
이제 아파치를 설지를 해야겠죠? 그런데 아파치를 설치하는데는 크게 2가지가 있습니다
rpm설치와 소스설치가 있습니다.
throttle을 설치할 경우 아피치를 소스설치로 하는것이 좋습니다.
소스설치의 경우 또 2가지가 있답니다.
DSO설치와 Static설치가 있어요..
저 둘의 차이점은 이 페이지 맨 아래에 적어둘께요. 참고하세요~~
일단은 DSO설치방법을 살펴봅시다.
1. 아파치 설치방법(1)
1-1.아파치를 DSO으로 설치하기
아파치를 아무곳에나? 받은후에 압축을 풉니다.
그런후에 압축을 푼 폴더로 이동을 합니다.
ex)#tar xvfz apache_1.3.29
#cd apache_1.3.29
이동을 한 후에, 환경설정을 해야합니다.
[root@ apache_1.3.27]# ./configure --prefix=/usr/local/apache \
--enable-rule=SHARED_CORE \
--enable-module=so --enable-shared=max \
(참고로 php를 설치하셔야 하는분은
([root@ apache_1.3.29]# ./configure --prefix=/usr/local/apache \
(--enable-rule=SHARED_CORE \
(--enable-module=so --enable-shared=max \
(--activate-module=src/modules/php4/libphp4.a \
☆☆여기서 띄어쓰기를 주의하세요. 예를들어 apache\같이 띄어쓰기를 하지 않을경우 설치가 제대로 되지 않습니다☆☆
이제 컴파일, 설치를 합니다
[root@ apache_1.3.27]# make
[root@ apache_1.3.27]# make install
1-2.아파치를 DSO로 설치하였을 경우 throttle을 설치하는 방법
DSO로 설치하였을 경우 throttle을 설치하기가 매우 쉽습니다.
일단 throttle설치파일을 받습니다.
받는곳은 http://www.snert.com/Software/mod_throttle <--저곳에 있습니다.
귀찮으신 분은 http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz <--저것을 받으시면 됩니다.
(현재 snert.com 사이트에는 close된 상태이므로 첨부파일을 다운받아서 설치하면 됩니다.)
받으신후 아무곳에나? 압축을 풉니다.
그리고 나서 압축을 푼 폴더로 이동합니다
ex)# tar xvfz mod_throttle312.tgz (압축풀기)
# cd mod_throttle (이동하기)
그리고 나서 설치를 하시면 됩니다.
# make install
그런데 여기서 잘 살펴보아야 할점을, 설치를 하는경우 apxs라는 파일을 사용하는데 그것은 아파치의 bin폴더에 있습니다.
보통 저 경로를 지정하지 않았을 경우, 에러가 나게 되지요
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
따라서, 압축을 푼 폴더로 이동을 하신후에
#PATH=$PATH:/usr/local/apache/bin
#export path
저 명령을 내리십시오.
저렇게 반드시 하신후에
#make install
저 명령을 하시기 바랍니다
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
이제 설치가 완료 되었습니다
httpd.conf파일을 설정을 하게 되면, 트래픽을 조정할수 있습니다.
설정방법은 "3.아파치의 httpd.conf설정하기"에적어놓았습니다. 반드시 보세요.
----------------------------------------------------------------------------------------------------
혹시 mysql이나 php등을 설치할때, 뭐가 뭔지 혼란이 오시는 분이 있을까봐, 제가 설치하는 모습을 그대로 재현해 보았습니다.
참고하세요.
[root@ ]# tar xvfz apache_1.3.27 -C /usr/local
[root@ apache_1.3.27]# ./configure --prefix=/usr/local/apache
[root@ ]# tar xvfz php-4.2.3 -C /usr/local
[root@ php-4.2.3]# ./configure --with-apache=../apache_1.3.27 \
--with-mysql=/usr/local/mysql \
--with-gd --with-gif-dir=/usr/lib \
--with-png-dir --with-zlib-dir --with-jpeg-dir \
--with-imap --with-imap-ssl --with-kerberos \
--with-freetype-dir --enable-ftp --enable-socket \
--disable-debug --enable-track-vars
[root@ php-4.2.3]# make
[root@ php-4.2.3]# make install
[root@ apache_1.3.27]# ./configure --prefix=/usr/local/apache \
--enable-rule=SHARED_CORE \
--enable-module=so --enable-shared=max \
--activate-module=src/modules/php4/libphp4.a \
[root@ apache_1.3.27]# make
[root@ apache_1.3.27]# make install
[root@ ]# tar xvfz mod_throttle312.tgz
[root@ ]# cd mod_throttle
[root@ ]# make install
-----------------------------------------------------------------------------------------
2. 아파치 설치방법(2)
2-1.아파치를 static으로로 설치
static으로 설치하는 방법도 DSO와 유사합니다.
웹에서 아파치를 다운로드 한후에(물론 1.3.x버젼이어야 합니다.)
압축을 푸시고, 압축을 푼 폴더로 이동을 합니다.(이동 방법은 좀전의 방법과 같습니다.)
이동후 저와같은 명령을 내리십시오.
# ./configure --prefix=/usr/local/apache \
--add-module=src/modules/extra/mod_throttle.c
(참고로 php를 설치하셔야 하는분은
(# ./configure --prefix=/usr/local/apache \
(--activate-module=src/modules/php4/libphp4.a \
(--add-module=src/modules/extra/mod_throttle.c
(이와같이 하시면 됩니다.
☆☆여기서 띄어쓰기를 주의하세요. 예를들어 apache\같이 띄어쓰기를 하지 않을경우 설치가 제대로 되지 않습니다☆☆
그후 아파치를 컴파일 설치하시면 됩니다
#make
#make install
설치가 잘 되었는지 알아보는 방법은 아래와 같습니다.
# /usr/local/apache/bin/httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_setenvif.c
mod_php4.c
mod_throttle.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
여기서 mod_throttle.c이 있다면, 설치성공^^
설치가 완료 되었으므로, httpd.conf를 설정을 하시면 끝납니다.
"3.아파치의 httpd.conf설정하기"에 적어놓았으니 반드시 읽어보세요
------------------------------------------------------------------------------------------
3.아파치의 httpd.conf설정하기
설정파일을 설정해 봅시다.
#vi /usr/local/apache/conf/httpd.conf
그러면 설정파일이 나타납니다.
일단 맨 아래에 이것을 추가하세요.
<IfModule mod_throttle.c>
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
</Location>
<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
SetHandler throttle-me
</Location>
</IfModule>
그런후에
저렇게 한후에 가상 호스트 설정을 할수도 있습니다
방법은
<VirtualHost 123.123.123.123>
ServerAdmin dream@praise.co.kr
DocumentRoot /home/dream/public_html
ServerName myserver.co.kr
ServerAlias www.myserver.co.kr
ThrottlePolicy Volume 1024M 1d // 1일 1G 제한
ThrottlePolicy Request 1000 1d // 하루 히트수 1000회 제한
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log common
</VirtualHost>
입니다.
http://자신의 아이피 혹은 도메인/throttle-status 에서,
서버에 설정된 대역폭의 모든 내용을 확인 할 수 있으며
서버에 설정된 특정 도메인의 트래픽을 확인 하려면
http://자신의 아이피 혹은 도메인/~아이디/throttle-me 를 확인 하면 됩니다.
이제 끝이랍니다.~
지금까지 따라오시느라 힘드셨죠?
수고 하셨습니다
만약 이글을 카피하시려면, 제 별명이나 한자 적어주세요
kucs.korea.ac.kr
그럼^^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
참고사항
----------------------------------------------
DSO 방식과 Static 방식의 차이점은 무엇일가요?
DSO방식은 아파치를 먼저 컴파일하고 다른 모듈들을 추가로 설치할 때는 아파치를 재 컴파일하지
않고 한번 설정되어 컴파일된 아파치를 계속 사용하는 것이다.
즉, DSO방식은 아파치를 단 한번만 컴파일한다는 것이다. 이점은 관리, 설치면에서 커다란 장점이다.
Static 방식은 설치면에서 추가로 모듈을 설치하려고 하면 설정하려는 모듈만 설정하고 컴파일하는
과정이 필요할 뿐만 아니라 아파치 또한 그에 따라 컴파일을 하여야 한다.
이는 관리면에서 단점이 될 수 있다.
시스템 측면에서 이 두 가지의 차이점이 있다.
먼저 DSO는 아파치에 설치된 모듈이 필요할 때 시스템에 적재된다. 이는 클라이언트의 요청에
응답하는 요청시간이 다소 느릴 수 있지만, 하드웨어의 속도가 뒷받침된다면 해결이 될 수 있는 부분이다.
여하튼 이런 방식(DSO)은 시스템의 리소스(메모리, CPU)들을 적절하게 효율적으로 사용한다고 볼 수 있다.
이 방식은 예전에는 실험적인 성격을 가졌지만, 이젠 거의 안정 수준에 올라와 점점 DSO방식을 선호하고 있다.
또 다른 방식인 Static 방식은 이전 방식(DSO)와는 다소 차이가 있다.
이 방식은 아파치에 추가된 모듈이 아파치의 기동과 함께 모든 모듈을 포함하여 시스템에 적재한다.
만약 아파치의 기동과 함께 적재된 어떤 모듈이 클라이언트에 의해 거의 쓰지 않는다면 쓸데없이
시스템 리소스를 점유하고 있으므로 이는 비효율적이라 볼 수 있다.
또한 아파치와 각 모듈들은 설치시 복잡하다.
각 모듈과 설정된 아파치에 또 다시 모듈을 추가하려 할 때 아파치와 모듈을 다시 컴파일하여야 한다.
----------------------------------------------------------------------------------------------------
4. throttle-status 보안 강화
1)허용 IP만 접근 가능하게 하는 방법
#vi /usr/local/apache/conf/httpd.conf
<IfModule mod_throttle.c>
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
Deny from all // 다른접근을 모두 거부하고
Allow from 123.123.123.123 // 특정 아이피에서만 throttle-status 를 확인 하도록
</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>
2)apache 인증방법 사용 (추천. ip허용방식은 로컬ip로 줄경우 telnet접속으로 접근가능하기때문에 이방법 사용을 추천)
<IfModule mod_throttle.c>
ThrottlePolicy none
<Location /throttle-status>
SetHandler throttle-status
AuthName "Throttle-Status Admin"
AuthType Basic
AuthUserFile /htpasswd파일저장경로/.htpasswd
//ErrorDocument 401 /home/Not_allowed.html
require valid-user
</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>
수정 한 후에 비밀번호 지정
htpasswd라는 명령을 이용하여 접근허용 가능한 사용자 아이디, 패스워드를 설정할 수 있다.
htpasswd [옵션] 패스워드파일 사용자ID
-c : 패스워드 파일을 새로 생성할 경우 사용
-m : MD5를 이용한 비밀번호 생성
-d : crypt()를 이용한 비밀번호 생성
-p : 평문(암호화 하지 않음)으로 비밀번호 생성
여기서 패스워드파일은 보통 .htpasswd라는 파일로 생성한다.
처음 사용자를 추가할 경우엔 -c 옵션을 사용하며, 기존의 파일이 있음에도 -c 옵션을 사용할 경우 기존의 패스워드파일에 새로운 패스워드 파일을 덮어쓰게 된다.
사용자ID는 새로 추갛할 사용자의 아이디를 적어주면 되는데 ':'문자를 포함하지 않는 문자로 255자까지 설정이 가능하다.
다음은 test1라는 아이디로 사용자를 처음 생성한후, test2이라는 아이디를 추가하는 예이다.
#/usr/local/apache/bin/htpasswd -c /htpasswd파일저장경로/.htpasswd test1
New password: (패스워드 입력)
Re-type new password : (패스워드 재입력)
Adding password for user test
#/usr/local/apache/bin/htpasswd /htpasswd파일저장경로/.htpasswd test2
New password: (패스워드 입력)
Re-type new password : (패스워드 재입력)
Adding password for user test2
5. throttle-status 페이지(throttle-me 포함) 설명
제가 운영하는 서버의 샘플입니다. 도메인은 개인정보(?)보호상~ 각각의 항목 내용은 아래와 같습니다.
Hits : 하나의 파일에 한번 접속할 때마다 1씩 증가하며, 웹페이지의 구성이 1개의 Html, 15개의 이미지, 2개의 css, 1개의 .js 파일이 있다면 한번 접속시 19가 증가합니다.
Refused : 일일 접속 허용 트래픽을 초과한 이후부터 접속 거절된 요청수입니다.
KBytes sent : 현재까지 전송된 전송량을 나타냅니다. 이 수치가 Limit를 초과하게 되면 그때부터 홈페이지에 접속할 수 없게 됩니다. 또한 기본값으로 24시간동안 사용할 수 없도록 되어있습니다.
KBytes per hit : KBytes sent 수치를 Hits 수치로 나눈 값입니다.
Delay(<=30) : 알수 없음(매뉴얼에 내용이 없네요)
Policy : 트래픽 제한의 방법을 결정하며, httpd.conf 에서 지정한 방식으로 결정됩니다.
Limit : 트래픽 제한의 수치를 알려주며, 기본이 M(Mega Bytes)이며, K(Kilo Bytes), G(Giga Bytes) 를 사용할 수 있습니다.
Period : 트래픽 수집 기간을 나타내며 단위는 s(seconds), m(Minutes), H(hours), d(days), w(weekends)가 있습니다. Limit가 none일 경우(트래픽 제한을 하지 않으면 4w가 기본입니다. 4주 즉 한달이지요)
Period Elapsed : 트래픽 초과후 제한 기간을 시간화한 것입니다. 즉 허용 트래픽을 초과한 직후부터 증가하는데 23:59:59 다음은 00:00:00:00으로 됩니다. 즉 트래픽 초과한 직후부터 24시간동안 사용할 수가 없다는 의미입니다.
Idle Timie : 마지막 접속자의 접속시간부터 지난 시간입니다.(평균 시간이 아님) 방문자가 생기면 0으로 초기화되어 다시 다음 접속자가 나타날때까지 증가됩니다.(초단위)
6. httpd.conf 에서 mod_throttle 관련 지시어 설명
mod_throttle의 동작과 제한을 httpd.conf 에서 설정하는데 옵션은 아래와 같습니다. 보다 자세한 자료는 mod_throttle 디렉토리의 index.shtml 을 보시기 바랍니다.(영문이죠? 에효~~)
none : 아무 정책이 없으며 단순 모니터링용
Concurrent : 동시접속수를 제한하는 것이며, 효율성은......전무하지는 않겠군요. 활용은 다들 알아서..^^
Document : html 문서에 대한 카운터 제한을 거는 것입니다. 이미지와 CSS 파일은 제외라고 하네요.
Idle : 한번 요청한 후에 쉬는 시간을 두는 겁니다. 하나의 접속자가 많은 시스템 요소를 가져갈 경우 약간의 딜레이를 주어서 서버 부하를 줄이는 것 같습니다만..역시 효용성은? ?????
Random : 랜덤하게 허용/거부하는 것입니다만, 접속자는 열받겠군요..나는 안되고 저쪽은 되고? 이때 limit는 퍼센트로 지정이 되며 0은 모두 거절, 100이면 모두 허가입니다.
Request : 요청수를 제한하는 것이며, 모든 파일이 카운팅됩니다.
Volume : 제한 용량을 의미합니다.
Speed : Volume 과 비슷하나 거부가 아니라 연기시킵니다. (이해불가능)
각 정책에 관련된 기술형식
none : 단독으로 사용됩니다.
Concurrent [동시접속수(IP수)] [시간단위]
Document [html형식의 문서수] [시간단위]
Idle [쉬는시간(초단위)] [시간단위]
Random [허용퍼센트(숫자만)] [시간단위]
Request [히트수] [시간단위]
Volume [전송용량] [시간단위]
Speed [제한전송용량] [시간단위]
시간단위 형식
s(초, Second), m(분, Minute) H(시간, Hour), D(하루, Day), W(주, Weekend)
실제 httpd.conf 에서 사용할 수 있는 지시어는 아래와 같습니다. 효율성이 있는것만 골라서~~~
throttle-status 화면의 표시형식을 나타내어 주며, 기본값은 text/html 입니다.
ThrottleIndicator green percentage
ThrottleIndicator yellow percentage
ThrottleIndicator red percentage
각각의 도메인주소 또는 홈페이지 주소가 사용량(percent, %값)에 따라 색깔이 달라지는데 그 기준을 지정하는 것입니다. 별 필요가없는듯......
ThrottlePolicy policy limit period
실제 트래픽 제한을 거는 항목입니다.
policy는 위에서 설명했듯이 제한을 거는 정책을 뜻합니다. 일반적으로 Volume 과 Request를 많이 사용합니다.
ThrottleRefresh time
통계 화면의 Refresh 시간을 지정합니다. 통계 화면을 켜 놓으면 일정시간 지난후에 자동으로 Refresh 되는데 그 시간을 지정합니다. 기본이 60초입니다.