IDC에 있는 개인서버 한대에 이것저것 구동하다 보니 caching 문제가 염려되어 apache에 mod_cache를 적용해 보았습니다. eAccelator와 더불어 실질적으로 리눅스 서버의 CPU점유율과 성능향상에서 이점을 얻었습니다.

 웹사이트나 특정 폴더별로 세부적으로 세팅할 수 있지만 저는 전체 서버에 적용되도록 아래와 같이 세팅하였습니다. 캐쉬는 가끔 실서비스하는 시스템에서도 이상동작을 일으키는 경우가 있는데 대부분은
"수정해서 웹서버에 반영했는데 바뀌지 않아요..클라이언트에서 nocache 헤더를 붙이도록 조작(CTRL-F5, SHIFT-F5)을 했는데도 그래요" 이런 부분인데 대부분 웹서버나 앞단의 캐쉬서버의 문제인 경우가 있다. 하지만 apache는 그런 세밀한 부분까지 제어 할 수 있는것이 마음에 들었다. squid나 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>











아래 글의 출처는 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>

<VirtualHost 아이피>
    ServerName 외부도메인2
    ProxyPass / http://내부도메인2/
    ProxyPassReverse / http://내부도메인2/
</VirtualHost>

<VirtualHost 아이피>
    ServerName 외부도메인3
    ProxyPass / http://내부도메인3/
    ProxyPassReverse / http://내부도메인3/
</VirtualHost>

(4) 확인
   - 아파치를 재기동 시킨다
   - 외부 도메인의 서버 / 내부 도메인의 서버의 access log를 확인하여 proxy 및 cache가 제대로 되는지 확인한다.

* 참고) 브라우져마다 자체 Caching정책으로 proxy 제대로 되지 않는 것처럼 보일 수 있기 때문에
브라우져의 역할을 대체하는 간단한 코드를 작성하여 테스트 하는 것이 확실하게 proxy 및 cache가 되는지 알 수 있다 (필자는 python을 이용하여 테스트 하였다.)

이상으로 proxy 및 cache에 대한 구성을 마치며, 궁금한 사항이나 의문사항이 있으면 댓글이나
hakburi@naver.com 으로 메일 보내면 답변을 해드릴 예정이다
      
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/07/09 03:37 2008/07/09 03:37
TAG 이올린 태그검색올블로그 태그검색테크노라티 태그검색태그스토리 태그검색티스토리 태그검색

댓글을 달아 주세요