IDC에 있는 개인서버 한대에 이것저것 구동하다 보니 caching 문제가 염려되어 apache에 mod_cache를 적용해 보았습니다. eAccelator와 더불어 실질적으로 리눅스 서버의 CPU점유율과 성능향상에서 이점을 얻었습니다.
웹사이트나 특정 폴더별로 세부적으로 세팅할 수 있지만 저는 전체 서버에 적용되도록 아래와 같이 세팅하였습니다. 캐쉬는 가끔 실서비스하는 시스템에서도 이상동작을 일으키는 경우가 있는데 대부분은
아래 글의 출처는 http://mygeni.tistory.com/10 입니다.
참고로 http://httpd.apache.org/docs/2.2/mod/mod_cache.html 는 apache 공식문서
Apache Proxy, Cache Server 구축 방법
Apache를 이용하여 proxy(reverse) 및 cache 기능을 구현하는 방법에 대해서 논하고자 한다.
단, 필자가 실제 서비스에 필요한 사항만 기술하니 기타 자세한 사항은 apache 공식 사이트의 내용을 참고하기 바란다
(1) 환경
- Web Server : Apache 2.2.6
- modules : mod_proxy, mod_cache (mod_disk_cache, mod_mem_cache)
- 3개의 도메인 / 내부도메인 (외부도메인 ==> 내부도메인 forwarding)
- Reverse Proxy
- Disk Caching (특정 디렉토리만 Caching) - MaxDiskSize 1G
(2) 설치 (설치시 필요한 Library는 정상설치되었다고 가정한다.)
- Configure option
./configure --prefix=/usr/local/apache --enable-module=so --enable-modules=all --enable-mods-shared=all --enable-proxy --enable-cache --enable-mem-cache --enable-file-cache --enable-disk-cache --with-zlib=/usr/local/lib/ --enable-deflate
참고) Apache 컴파일 시 아래와 같은 오류가 발생하는 경우
mod_deflate has been requested but can not be built due to prerequisite failures
; 이 오류는 deflate라는 압축관련 모듈을 load 하는 과정에서 zlib library가 상기 configure에서 지정한
경로에 존재하지 않거나 혹은 zlib의 devel 패키지가 설치되지 않았을 경우에 발생할 수 있다
따라서, [zlib_devel 다운로드]에서 devel 패키지를 다운받아 설치 후 아파치를 컴파일 하면 정상적으로
설치된다.
(3) 셋팅
- Cache를 위한 특정 디렉토리 생성 (예:CacheRoot /usr/local/apache/cache)
- 아피치 디렉토리/conf/httpd.conf 수정
# Virtual hosts
Include conf/extra/httpd-vhosts.conf <== 주석 제거
- 가상호스트 수정 (아피치 디렉토리/conf/extra/httpd-vhost.conf)
- 아파치를 재기동 시킨다
- 외부 도메인의 서버 / 내부 도메인의 서버의 access log를 확인하여 proxy 및 cache가 제대로 되는지 확인한다.
* 참고) 브라우져마다 자체 Caching정책으로 proxy 제대로 되지 않는 것처럼 보일 수 있기 때문에
브라우져의 역할을 대체하는 간단한 코드를 작성하여 테스트 하는 것이 확실하게 proxy 및 cache가 되는지 알 수 있다 (필자는 python을 이용하여 테스트 하였다.)
이상으로 proxy 및 cache에 대한 구성을 마치며, 궁금한 사항이나 의문사항이 있으면 댓글이나
hakburi@naver.com 으로 메일 보내면 답변을 해드릴 예정이다
웹사이트나 특정 폴더별로 세부적으로 세팅할 수 있지만 저는 전체 서버에 적용되도록 아래와 같이 세팅하였습니다. 캐쉬는 가끔 실서비스하는 시스템에서도 이상동작을 일으키는 경우가 있는데 대부분은
"수정해서 웹서버에 반영했는데 바뀌지 않아요..클라이언트에서 nocache 헤더를 붙이도록 조작(CTRL-F5, SHIFT-F5)을 했는데도 그래요" 이런 부분인데 대부분 웹서버나 앞단의 캐쉬서버의 문제인 경우가 있다. 하지만 apache는 그런 세밀한 부분까지 제어 할 수 있는것이 마음에 들었다. squid나 apache만을 활용해도 괜찮은 성능이 가능할 듯.
(참고로 CacheIgnoreCacheControl 값은 유의해서 사용해야 할 듯. 일시적인 문제로 apache가 비 정상적인 페이지를 캐슁하는 경우가 발생했다)
(참고로 CacheIgnoreCacheControl 값은 유의해서 사용해야 할 듯. 일시적인 문제로 apache가 비 정상적인 페이지를 캐슁하는 경우가 발생했다)
저의 세팅(httpd.conf)
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /dsk1/cache
CacheDirLength 4
CacheDirLevels 5
CacheMaxFileSize 64000
CacheMinFileSize 64
CacheDefaultExpire 86400
#CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheLastModifiedFactor 0.5
CacheMaxExpire 604800
</IfModule>
#<IfModule mod_mem_cache.c>
# CacheEnable mem /
# MCacheMaxObjectCount 13001
# MCacheMaxObjectSize 6400000
# MCacheMaxStreamingBuffer 65536
# MCacheMinObjectSize 10000
# MCacheRemovalAlgorithm GDSF
# MCacheSize 256000
# CacheDefaultExpire 86400
# CacheIgnoreCacheControl On
# CacheIgnoreNoLastMod On
# CacheLastModifiedFactor 0.5
# CacheMaxExpire 604800
#</IfModule>
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /dsk1/cache
CacheDirLength 4
CacheDirLevels 5
CacheMaxFileSize 64000
CacheMinFileSize 64
CacheDefaultExpire 86400
#CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheLastModifiedFactor 0.5
CacheMaxExpire 604800
</IfModule>
#<IfModule mod_mem_cache.c>
# CacheEnable mem /
# MCacheMaxObjectCount 13001
# MCacheMaxObjectSize 6400000
# MCacheMaxStreamingBuffer 65536
# MCacheMinObjectSize 10000
# MCacheRemovalAlgorithm GDSF
# MCacheSize 256000
# CacheDefaultExpire 86400
# CacheIgnoreCacheControl On
# CacheIgnoreNoLastMod On
# CacheLastModifiedFactor 0.5
# CacheMaxExpire 604800
#</IfModule>
아래 글의 출처는 http://mygeni.tistory.com/10 입니다.
참고로 http://httpd.apache.org/docs/2.2/mod/mod_cache.html 는 apache 공식문서
Apache Proxy, Cache Server 구축 방법
Apache를 이용하여 proxy(reverse) 및 cache 기능을 구현하는 방법에 대해서 논하고자 한다.
단, 필자가 실제 서비스에 필요한 사항만 기술하니 기타 자세한 사항은 apache 공식 사이트의 내용을 참고하기 바란다
(1) 환경
- Web Server : Apache 2.2.6
- modules : mod_proxy, mod_cache (mod_disk_cache, mod_mem_cache)
- 3개의 도메인 / 내부도메인 (외부도메인 ==> 내부도메인 forwarding)
- Reverse Proxy
- Disk Caching (특정 디렉토리만 Caching) - MaxDiskSize 1G
(2) 설치 (설치시 필요한 Library는 정상설치되었다고 가정한다.)
- Configure option
./configure --prefix=/usr/local/apache --enable-module=so --enable-modules=all --enable-mods-shared=all --enable-proxy --enable-cache --enable-mem-cache --enable-file-cache --enable-disk-cache --with-zlib=/usr/local/lib/ --enable-deflate
참고) Apache 컴파일 시 아래와 같은 오류가 발생하는 경우
mod_deflate has been requested but can not be built due to prerequisite failures
; 이 오류는 deflate라는 압축관련 모듈을 load 하는 과정에서 zlib library가 상기 configure에서 지정한
경로에 존재하지 않거나 혹은 zlib의 devel 패키지가 설치되지 않았을 경우에 발생할 수 있다
따라서, [zlib_devel 다운로드]에서 devel 패키지를 다운받아 설치 후 아파치를 컴파일 하면 정상적으로
설치된다.
(3) 셋팅
- Cache를 위한 특정 디렉토리 생성 (예:CacheRoot /usr/local/apache/cache)
- 아피치 디렉토리/conf/httpd.conf 수정
# Virtual hosts
Include conf/extra/httpd-vhosts.conf <== 주석 제거
- 가상호스트 수정 (아피치 디렉토리/conf/extra/httpd-vhost.conf)
<VirtualHost 아이피>
ServerName 외부도메인1
ProxyPass / http://내부도메인1/
ProxyPassReverse / http://내부도메인1/
CacheRoot /usr/local/apache/cache
CacheEnable disk /public_html
CacheMaxFileSize 1000000000
CacheDefaultExpire 60
CacheIgnoreNoLastMod On
CacheMaxExpire 60
</VirtualHost>
(4) 확인ServerName 외부도메인1
ProxyPass / http://내부도메인1/
ProxyPassReverse / http://내부도메인1/
CacheRoot /usr/local/apache/cache
CacheEnable disk /public_html
CacheMaxFileSize 1000000000
CacheDefaultExpire 60
CacheIgnoreNoLastMod On
CacheMaxExpire 60
</VirtualHost>
<VirtualHost 아이피>
ServerName 외부도메인2
ProxyPass / http://내부도메인2/
ProxyPassReverse / http://내부도메인2/
</VirtualHost>
<VirtualHost 아이피>
ServerName 외부도메인3
ProxyPass / http://내부도메인3/
ProxyPassReverse / http://내부도메인3/
</VirtualHost>
- 아파치를 재기동 시킨다
- 외부 도메인의 서버 / 내부 도메인의 서버의 access log를 확인하여 proxy 및 cache가 제대로 되는지 확인한다.
* 참고) 브라우져마다 자체 Caching정책으로 proxy 제대로 되지 않는 것처럼 보일 수 있기 때문에
브라우져의 역할을 대체하는 간단한 코드를 작성하여 테스트 하는 것이 확실하게 proxy 및 cache가 되는지 알 수 있다 (필자는 python을 이용하여 테스트 하였다.)
이상으로 proxy 및 cache에 대한 구성을 마치며, 궁금한 사항이나 의문사항이 있으면 댓글이나
hakburi@naver.com 으로 메일 보내면 답변을 해드릴 예정이다
"PlatForm" 카테고리의 다른 글
- 어제의 트윗 (2010-11-07) 2010/11/08
- 어제의 트윗 (2010-11-06) 2010/11/07
- 어제의 트윗 (2010-08-31) 2010/09/01
- 어제의 트윗 (2010-08-30) 2010/08/31
- 어제의 트윗 (2010-08-29) 2010/08/30
- 어제의 트윗 (2010-08-27) 2010/08/28
- 어제의 트윗 (2010-08-26) 2010/08/27
- 어제의 트윗 (2010-08-25) 2010/08/26
- 어제의 트윗 (2010-08-24) 2010/08/25
- 어제의 트윗 (2010-08-22) 2010/08/23
- 어제의 트윗 (2010-08-21) 2010/08/22
- 어제의 트윗 (2010-08-20) 2010/08/21
- 어제의 트윗 (2010-08-19) 2010/08/20
- 어제의 트윗 (2010-08-18) 2010/08/19
- 어제의 트윗 (2010-08-17) 2010/08/18
- 어제의 트윗 (2010-08-16) 2010/08/17
- 어제의 트윗 (2010-08-13) 2010/08/14
- 어제의 트윗 (2010-08-12) 2010/08/13
- 어제의 트윗 (2010-08-11) 2010/08/12
- 어제의 트윗 (2010-08-09) 2010/08/10






57237
1
24













댓글을 달아 주세요