강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

개별홈페이지의 일트래픽 및 일hit수 제한하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

개별홈페이지의 일트래픽 및 일hit수 제한하기

 

 

 

 

 

 

 

호스팅업체의 서비스내역을 확인해 보면 일hit수 제한과 일트래픽을 제한하고있는 경우를 흔히 볼 수 있다.

 

 

 

 

 리눅스 서버를 관리하는 분들께서 가장 많이 궁금해 하는 부분이 바로 일hit수 제한과 일트래픽제한을 하는 방법에 대한 것이다.

 

 

 

 

 따라서 이번 절에서는 아파치웹서버에서 이런 설정들을 어떻게하는가를 실제작업을 통해서 알아보도록하겠다.

 

 

 

 

 

APACHE에서는 기본이 DSO방식의 설치이며 이 웹사이트(www.linux.co.kr)의 설치방법 또한 DSO로 설치하여 지금까지의 설명 또한 APACHE  DSO방식으로 설치한 것으로 설명해왔다.

 

 

 

 

 하지만 이번에 설명드리는 mod_throttle과 다음 절에서 설명드릴 mod_bandwidth에 대해서는 아파치를 정적으로 설치하여 각각의 모듈을 로드하여 작업하고있다.

 

 

 

 

 따라서 아파치를 정적으로 설치하는 방법을 여기에서도 설명하고있기는 하지만 정적설치의 설명은 앞 장의 아파치 설치방법을 함께 참고하기 바란다.

 

 

 

 

 

 

먼저 상황설정해 해보면 다음과 같다.

 

 

 

 

 


*
전제상황 : 대상서버에 설정되어 사용하는 도메인은 다음과 같다.

 

 

 

 

 

메인사이트 : www.superuser.co.kr
호스팅사이트1 : test01.superuser.co.kr
호스팅사이트2 : test02.superuser.co.kr
호스팅사이트3 : test03.superuser.co.kr

 

이들 도메인들의 DNS설정들은 이미 설정되어 있다는 것으로 가정한다.

 

 

 

 

 


작업1. 현재 아파치에 로드된 모듈들 확인

[root@sulinux bin]# /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

suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

[root@sulinux bin]#



 

 

아파치에서 일hit수 제한과 일트래픽을 제한하기 위해서는 mod_throttle이라는 모듈이 올라(로드, load)가 있어야한다.

 

 

 

 

 아파치에 로드된 모듈을 확인하기 위해서는 “httpd -l”을 실행하여 확인할 수 있다.

 

 

 

 

 따라서 위의 결과를 보면 현재 mod_throttle모듈이 로드되어있지 않다는 것을 확인할 수 있다.

 

 

 

 

 

 

작업2. 현재 운용중인 아파치 중지

[root@sulinux apache]# /usr/local/apache/bin/apachectl stop

/usr/local/apache/bin/apachectl stop: httpd stopped

[root@sulinux apache]#

[root@sulinux apache]# ps -ef | grep httpd

root      2119  2041  0 13:05 pts/0    00:00:00 grep httpd

[root@sulinux apache]#

[root@sulinux network-scripts]# cd /usr/local/apache/bin

[root@sulinux bin]#



 

 

작업3. mod_throttle 소스를 가져온다.

 

 

 

 


 

가져온 소스는 반드시 /usr/local/apache/src/modules/extra에 저장되어있어야 한다.

 

 

 

 

 따라서 소스를 가져오기 위하여 /usr/local/apache/src/modules/extra로 이동한다.

 

 

 

 

 

[root@sulinux modules]# cd /usr/local/apache/src/modules/extra

[root@sulinux extra]# ls -l

합계 4

-rw-r--r--    1 sspark   games          63  5 10  1998 Makefile.tmpl

[root@sulinux extra]#

[root@sulinux extra]# wget http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz

--12:56:57--  http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz

           => `mod_throttle312.tgz'

Resolving www.snert.com... 완료.

Connecting to www.snert.com[193.41.72.72]:80... connected.

HTTP 요청을 보냅니다, 서버로부터의 응답을 기다림...200 OK

길이:   41,397 [application/x-tar]

 

100%[========================================================================================>] 41,397       331.37K/s    ETA 00:00

 

12:56:58 (331.37 KB/s) - `mod_throttle312.tgz'가 보존되었습니다 [41397/41397]

 

[root@sulinux extra]#

[root@sulinux extra]# ls -l

합계 48

-rw-r--r--    1 sspark   games          63  5 10  1998 Makefile.tmpl

-rw-r--r--    1 root     root        41397 12  3  2000 mod_throttle312.tgz

[root@sulinux extra]#

 

 

 

 

위와 같이 wget을 이용하여 mod_throttle.tgz라는 압축소스파일을 가져왔다.

 

 

 

 

 이제 이 소스파일을 아파치의 모듈로 로드하는 작업을 할 것이다.

 

 

 

 

  


작업4. mod_throttle 압축파일 풀기


아래의 예와 같이 tar명령어로 압축을 풀고난 후에 mod_throttle.c파일을 /usr/local/apache/src/modules/extra 디렉토리로 복사한다.

 

 

 

 

 이 디렉토리는 아파치가 외부모듈을 가져와서 컴파일하려고 할 때 외부모듈이 위치해야하는 디렉토리이다.

 

 

 

 

 

 

[root@sulinux extra]# tar xvfz mod_throttle312.tgz

mod_throttle-3.1.2/

mod_throttle-3.1.2/Img/

mod_throttle-3.1.2/Img/mrpixel.gif

mod_throttle-3.1.2/Img/sun-logo.jpg

mod_throttle-3.1.2/Img/wave1.jpg

mod_throttle-3.1.2/patch.proxy_util.c

mod_throttle-3.1.2/Makefile

mod_throttle-3.1.2/LICENSE.txt

mod_throttle-3.1.2/CHANGES.txt

mod_throttle-3.1.2/mod_throttle.c

mod_throttle-3.1.2/index.shtml

mod_throttle-3.1.2/version3.cnt

[root@sulinux extra]#

[root@sulinux extra]# ls -l

합계 52

-rw-r--r--    1 sspark   games          63  5 10  1998 Makefile.tmpl

drwxr-xr-x    3 111      users        4096 12  3  2000 mod_throttle-3.1.2

-rw-r--r--    1 root     root        41397 12  3  2000 mod_throttle312.tgz

[root@sulinux extra]#

[root@sulinux extra]# cd mod_throttle-3.1.2/

[root@sulinux mod_throttle-3.1.2]#

[root@sulinux mod_throttle-3.1.2]# ls -l

합계 156

-rw-r--r--    1 111      users        7233 12  3  2000 CHANGES.txt

drwxr-xr-x    2 111      users        4096 12  2  2000 Img

-rw-r--r--    1 111      users        1525 12  2  2000 LICENSE.txt

-rw-r--r--    1 111      users        1009 12  2  2000 Makefile

-rw-r--r--    1 111      users       26492 12  3  2000 index.shtml

-rw-r--r--    1 111      users       97711 12  3  2000 mod_throttle.c

-rw-r--r--    1 111      users         277 12  2  2000 patch.proxy_util.c

-rw-r--r--    1 111      users           4 12  3  2000 version3.cnt

[root@sulinux mod_throttle-3.1.2]#

[root@sulinux mod_throttle-3.1.2]# cp mod_throttle.c /usr/local/apache/src/modules/extra/

[root@sulinux mod_throttle-3.1.2]#

[root@sulinux mod_throttle-3.1.2]# cd /usr/local/apache/src/modules/extra/

[root@sulinux extra]#

[root@sulinux extra]# ls -l

합계 152

-rw-r--r--    1 sspark   games          63  5 10  1998 Makefile.tmpl

drwxr-xr-x    3 111      users        4096 12  3  2000 mod_throttle-3.1.2

-rw-r--r--    1 root     root        97711  4 16 13:04 mod_throttle.c

-rw-r--r--    1 root     root        41397 12  3  2000 mod_throttle312.tgz

[root@sulinux extra]#

[root@sulinux extra]#


위의 작업은 tar mod_throttle312.tgz라는 압축파일을 풀고 mod_throttle.c라는 아파치모듈파일을 /usr/local/apache/src/modules/extra디렉토리로 복사한 것이다.

 

 

 

 

 

 

작업5. 아파치를 재컴파일


이제 mod_throttle.c모듈파일을 아파치에 로드하기 위하여 아파치를 재컴파일할 것이다.

 

 

 

 

 재컴파일 할 때에는 기존 컴파일옵션에 mod_throttle이 모듈로 들어가도록 다음 예와 같은 옵션을 추가해서 configure작업을 한다.

 

 

 

 

 그리고 make make install작업을 하면된다.

 

 

 

 

 

 

[root@sulinux extra]# cd /usr/local/apache

[root@sulinux apache]#

[root@sulinux apache]# ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a --add-module=src/modules/extra/mod_throttle.c

Configuring for Apache, Version 1.3.28

 + using installation path layout: Apache (config.layout)

 + activated php4 module (modules/php4/libphp4.a)

 + on-the-fly added and activated throttle module (modules/extra/mod_throttle.o)

중략...

[root@sulinux apache]#

[root@sulinux apache]# make

===> src

make[1]: 들어감 `/usr/local/apache' 디렉토리

make[2]: 들어감 `/usr/local/apache/src' 디렉토리

===> src/os/unix

gcc -c  -I../../os/unix -I../../include   -DLINUX=22 -DNO_DL_NEEDED `../../apaci` os.c

gcc -c  -I../../os/unix -I../../include   -DLINUX=22 -DNO_DL_NEEDED `../../apaci` os-inline.c

중략...
[root@sulinux apache]#

[root@sulinux apache]# make install

make[1]: 들어감 `/usr/local/apache' 디렉토리

===> [mktree: Creating Apache installation tree]

./src/helpers/mkdir.sh /usr/local/apache/bin

./src/helpers/mkdir.sh /usr/local/apache/bin

./src/helpers/mkdir.sh /usr/local/apache/libexec

./src/helpers/mkdir.sh /usr/local/apache/man/man1

./src/helpers/mkdir.sh /usr/local/apache/man/man8

중략…..
[root@sulinux apache]#

 

 

작업6. mod_throttle모듈이 아파치에 로드되어 있는가를 확인한다.

 

 

 

 

 


이제 mod_throttle모듈이 아파치에 로드되어있는가를 확인할 차례이다.

 

 

 

 

 다음과 같이 “httpd -l”을 실행하여 아파치에 로드된 모듈을 다시한번 확인한다.

 

 

 

 

 

 

[root@sulinux apache]# cd /usr/local/apache/bin

[root@sulinux bin]#

[root@sulinux 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

[root@sulinux bin]#

 

위의 결과를 보면 맨 마지막부분에 “mod_throttle.c”라는 모듈파일이 로드되어있음을 알 수 있다.

 

 

 

 

 앞에서 확인하였을 때에는 존재하지 않은 모듈이였다.

 

 

 

 

 이제 이 모듈을 로드하였으므로 아파치의 httpd.conf파일에서 일트래픽제한과 일hit수 제한 설정을 하여 사용하기만 하면 된다.

 

 

 

 

 

 

작업7. httpd.conf파일에서 메인 설정을 다음과 같이 수정한다.

 

 

 

 

 

다음은 throttle모듈을 사용하여 일트래픽과 일hit수를 제한하기 위한 httpd.conf파일 설정이다.

 

 

 

 

 아래의 설정내용은 모두 httpd.conf파일의 맨 앞부분에 설정한 것이다.

 

 

 

 

 따라서 별도의 가상호스트에서 설정되지않은 사이트들에 공통적으로 적용되는 설정이다.

 

 

 

 

 

 

########## THEROTTLE CONFIGURATION START #####################

### Limited throttle page login Configuration

<Location /throttle-status>

Order deny,allow

Deny from all

Allow from 192.168.0.201

</Location>

 

### Throttle Module Configuration

<IfModule mod_throttle.c>

ThrottlePolicy Volume  5120M 1d // 1 5GB 로 제한

ThrottlePolicy Request 50000 1d        // 1일 히트수 50000로 제한

 

<Location /throttle-status>

SetHandler throttle-status

</Location>

 

<Location /throttle-me>

SetHandler throttle-me

</Location>

 

<Location /~*/throttle-me>

Order allow,deny

Allow from all

Deny from 111.222.111.222

SetHandler throttle-me

</Location>

</IfModule>

########## THEROTTLE CONFIGURATION END #####################

 

<Location /throttle-status>

Order deny,allow

Deny from all

Allow from 192.168.0.201

</Location>

 

위의 설정은 throttle로 분석된 일hit 및 일트래픽제한에 대하여 상황페이지를 볼 관리자페이지에 대한 접속제한 설정이다.

 

 

 

 

  192.168.0.201사용자만 분석된 결과페이지를 볼 수 있도록 설정한 것이다.

 

 

 

 

 

그리고 그 나머지 설정은 1일 트래픽량을 5GB로 제한하고 1hit수를 50000으로 제한한 설정이다.

 

 

 

 

 

 

 

작업8. throttle적용을 위한 httpd.conf파일의 가상호스트 설정

다음은 이절의 맨 앞부분에서 말씀드린 가상호스트들의 각 도메인에 대한 일트래픽량과 일hit수를 제한하는 각 개별설정을 한 것이다.

 

 

 

 

 

 

<VirtualHost 192.168.0.100>

    ServerAdmin test01@test01.superuser.co.kr

    DocumentRoot /home/test01/www

    ServerName test01.superuser.co.kr

ErrorLog /home/test01/www_log/error_log

    CustomLog /home/test01/www_log/access_log common

    ThrottlePolicy Volume  1024M 1d // 1 1GB 로 제한

    ThrottlePolicy Request 10000 1d        // 1일 히트수 10000로 제한

</VirtualHost>

<VirtualHost 192.168.0.100>

    ServerAdmin test02@test02.superuser.co.kr

    DocumentRoot /home/test02/www

    ServerName test02.superuser.co.kr

ErrorLog /home/test02/www_log/error_log

    CustomLog /home/test02/www_log/access_log common

    ThrottlePolicy Volume  2048M 1d // 1 2GB 로 제한

    ThrottlePolicy Request 20000 1d        // 1일 히트수 20000로 제한

</VirtualHost>

<VirtualHost 192.168.0.100>

    ServerAdmin test03@test03.superuser.co.kr

    DocumentRoot /home/test03/www

    ServerName test03.superuser.co.kr

ErrorLog /home/test03/www_log/error_log

    CustomLog /home/test03/www_log/access_log common

    ThrottlePolicy Volume  3096M 1d // 1 3GB 로 제한

    ThrottlePolicy Request 30000 1d        // 1일 히트수 30000로 제한

</VirtualHost>

 

즉 위의 설정 내용은 다음과 같다.

 

 

 

 

 

test01.superuser.co.kr
의 일hit수를 10000, 일트래픽을 1GB로 제한하는 설정.
test02.superuser.co.kr
의 일hit수를 20000, 일트래픽을 2GB로 제한하는 설정.
test03.superuser.co.kr
의 일hit수를 30000, 일트래픽을 3GB로 제한하는 설정.

 

 

작업9. 아파치를 재시작한다.

 

 

 

 

 


모든 설정작업이 끝났다.

 

 

 

 

 이제 throttle모듈을 적용하고 httpd.conf에 새로 설정한 내용들을 적용하기위하여 아파치웹서버를 재시작한다.

 

 

 

 

 

 

[root@sulinux conf]# /usr/local/apache/bin/apachectl restart

../bin/apachectl restart: httpd restarted

[root@sulinux conf]#

[root@sulinux conf]# ps -ef | grep httpd

root      4810     1  0 13:09 ?        00:00:00 /usr/local/apache/bin/httpd

daemon    4849  4810  0 13:30 ?        00:00:00 [httpd]

daemon    4850  4810  0 13:30 ?        00:00:00 [httpd]

daemon    4851  4810  0 13:30 ?        00:00:00 [httpd]

daemon    4852  4810  0 13:30 ?        00:00:00 [httpd]

daemon    4853  4810  0 13:30 ?        00:00:00 [httpd]

daemon    4854  4810  0 13:30 ?        00:00:00 [httpd]

root     12185  2041  0 14:47 pts/0    00:00:00 grep httpd

[root@sulinux conf]#



작업10. 서버전체 throttle 상황 보기

 

이제 일hit수와 일전송량의 제한을 웹브라우즈로 확인하기 위하여 다음과 같은 URL로 확인하도록 하겠다.

 

 

 

 

 먼저 서버전체의 제한사항을 관리자가 확인하기 위한 예이다.

 

 

 

 

 

확인하는 방법 :     http://IP주소/throttle-status

 
다음의 예는 http://www.superuser.co.kr/throttle-status”을 웹브라우즈에서 로딩한 예이다.

 

 

 

 

 웹서버 전체에 설정되어있는 throttle상황을 확인한 것이다.

 

 

 

 

 

 

ed0a995643cb253a41ca08b56cb7e711_1688976601_0967.png
 

 

위의 결과를 보는 바와같이 www.superuser.co.kr 메인서버와 test01.superuser.co.kr 그리고 test02.superuser.co.kr, test03.superuser.co.kr의 제한내역을 모두 확인할 수 있다.

 

 

 

 

 

즉 위의 결과에서 보면 각 1일 전송량과 1hit수 뿐아니라 현재의 hit수 까지 모두 확인 가능하다.

 

 

 

 

 당연히 이 화면은 서버관리자가 확인하는 페이지이다.

 

 

 

 

 

 

작업11. 개별사이트 throttle 상황보기


이제 개별 도메인들에 대한 개별 throttle제한상황을 확인해 보도록하겠다.

 

 

 

 

 이 페이지는 개별 웹사이트의 관리자들에게 제공되는 페이지이다.

 

 

 

 

 즉 웹호스팅등에서 고객들에게 자기자신이 사용한 웹사이트의 일트래픽전송량과 일hit등을 확인하도록 제공하기 위한 페이지이다.

 

 

 

 

 

 

개별도메인 제한상황 보는 방법 : http://개별도메인/throttle-me    


)      http://test01.superuser.co.kr/throttle-me
         http://test02.superuser.co.kr/throttle-me
         http://test03.superuser.co.kr/throttle-me

 

먼저 첫번째 test01.superuser.co.kr사이트의 제한내역이다.

 

 

 

 

 확인한 URLhttp://test01.superuser.co.kr/throttle-me 이다.

 

 

 

 

 보는 바와같이 일전송량의 제한과 일hit수등이 각각 1GB 10000으로 제한되어 있음을 알 수 있다.

 

 

 

 

 

 


ed0a995643cb253a41ca08b56cb7e711_1688976624_4424.png
 


다음은 두번째 test01.superuser.co.kr사이트의 제한내역이다.

 

 

 

 

 확인한 URL http://test02.superuser.co.kr/throttle-me 이다.

 

 

 

 

 보는 바와같이 일전송량의 제한과 일hit수등이 각각 2GB 20000으로 제한되어 있음을 알 수 있다.

 

 

 

 



ed0a995643cb253a41ca08b56cb7e711_1688976648_8999.png
 


다음은 세번째 test01.superuser.co.kr사이트의 제한내역이다.

 

 

 

 

 확인한 URL http://test03.superuser.co.kr/throttle-me 이다.

 

 

 

 

 보는 바와같이 일전송량의 제한과 일hit수등이 각각 3GB 30000으로 제한되어 있음을 알 수 있다.

 

 

 

 

 

 

ed0a995643cb253a41ca08b56cb7e711_1688976664_6495.png
 

 

지금까지 throttle모듈을 이용하여 각 도메인별로 일트래픽전송량제한과 일hit을 제한하는 설정에 대해서 알아보았다.

 

 

 

 

 

 


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  135 명