Project

General

Profile

Docs ModCache » History » Revision 7

Revision 6 (ziemkowski, 2007-10-21 18:48) → Revision 7/32 (ziemkowski, 2007-10-21 19:08)

[[TracNav(DocsToc)]] 
 {{{ 
 #!rst 
 ====================== 
 Web Accelerating Cache 
 ====================== 

 ----------------- 
 Module: mod_cache 
 ----------------- 

 .. meta:: 
   :keywords: lighttpd, cache, squid, web cache 
  
 .. contents:: Table of Contents 

 Description 
 =========== 
 mod_cache provides a shared web cache for mod_proxy and uses a configuration similar to Squid Cache.    mod_cache has several key benefits: 

   * Simple: mod_cache sets lighttpd flags between request handling stages. The request is then handled by mod_staticfile, mod_proxy, or other modules. 
   * Robust: mod_cache stores caches to the filesystem rather than to memory in order to avoid memory leaks/exhaustion. 
   * Fast: Lighttpd uses the Sendfile system call, which writes the file to the network interface directly. various backends, including sendfile, writev, and aio are provided by lighttpd 
   * Powerful: mod_cache can be used in conjunction with other lighttpd plugins (except mod_deflate).    For example; using mod_compress to compress cached files, using mod_access/mod_trigger_b4_dl to implement anti-hot-link restrictions, or using mod_flv_streaming to do native flv file streaming. mod_deflate) 

 With the shared web cache, mox_proxy is able to deliver content from the local cache without having to re-download bulky files, thus simultaneously increasing the speed from the    user's perspective while reducing up-stream bandwidth. 

 Installation 
 ============ 
 This module is a 3rd party module and is not included in the official distribution. You need to download it from here: 
  * For lighttpd 1.4.13: [http://www.linux.com.cn/modcache/lighttpd-1.4.13.mod_cache.v1.2.patch] 
  * For lighttpd 1.5.0.r1605: [http://www.linux.com.cn/modcache/lighttpd-1.5.0.r1605.modcache.v.1.3.2.patch] 

 The PCRE library is needed to build mod_cache. 

 Options 
 ======= 
 See [http://www.linux.com.cn/modcache/] 

 cache.bases 
    directory arrays which want to save cache files. 

    e.g.: :: 

       cache.bases=("/data/cache", "/data2/cache") 

    Default: not set 

 cache.enable 
    enable or disable mod_cache. 

    e.g.: :: 

     cache.enable = "disable" 
     $HTTP["host"] == "video.example.org" { 
       cache.enable = "enable" 
     } 

    Default: enable 

 cache.domains 
    domain pcre regex arrays which mod_cache will cache. 

    e.g.: :: 

      cache.domains = ("mydomain.com$") 

    Default: not set (means to cache every domains). 

 cache.support-queries 
    ignore '?' in request url or not. 

    e.g.: :: 

      cache.support-queries = "enable" # mod_cache treats "/uri?q1" or "/uri?q2" as "/uri".  

    Default: disable. 

 cache.debug 
    writes mod_cache debuging messages to error.log or not 

    Default: disable. 

 cache.purge-host 
    pcre regex hosts ip which are allowed to PURGE cache file 

    e.g.: :: 

       cache.purge-host = "^(192\.168\.|222\.120\.35\.)" # Allow PURGE from 192.168/16 and 222.120.35/24, plus hardcoded 10/8 and 127.0.0.1 

    Default: not set (10/8 and 127.0.0.1 are hardcoded to ip lists which allow to PURGE) 

 cache.ignore-hostname 
    don't include hostname in cache saving filename 

    Default: disable. 

 cache.refresh-pattern 
    arrays of    "url_pcre_regex" => "minutes options". Zero minute means cache forever. multi options are allowed. 

    refresh-pattern options are:  
        * ignore-reload: do not update cache when browser sends 'Cache-Control: no-cache' header. 
        * update-on-refresh: update cache when browser sends 'Cache-Control: no-cache' header.  
        * override-expire: ignore backend's 'Expire' header while determining whether to cache.  
        * ignore-cache-control-header: ignore backend's 'Cache-Control' headers while determining whether to cache.  
        * no-expire-header: do not set expires header on matched uri. without this options mod_cache set expire header based refresh-pattern rule.  
        * fetchall-for-range-request: download all content of file if browser sends 'Range: xxx-yyybytes' header. it is useful for multi-thread downloaders(such as flashget).  
        * nocache: do not cache matched url.  

 Examples 
 ======== 

 example for lighttpd 1.4.x series 

     e.g.: :: 

       cache.support-queries = "enable" #ignore '?' in url 
       cache.bases = ("/data/cache") # write cached files in /data/cache directory 
       cache.refresh-pattern = ( 
           "/$" => "5 update-on-refresh no-expire-header", # update homepage every 5 minutes and on refresh requests without setting expire headers 
           "\.(?i)(js|css|xml)$" => "240", # update js/css/xml every 4 hours and on refresh requests 
           "\.(?i)(htm|html|shtml)$" => "30", # update html/htm/shtml every 30 minutes and on refresh requests 
           "\.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880", # update graphics files every 2 days 
           "\.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request", # cache media file forever 
           "." => "30 update-on-refresh" # default to update every 30 minutes and on refresh requests 
       ) 
       #mod_proxy setting, config your backend servers here 
       proxy.server    = ( "/" => 
         ( 
                 ( "host" => "x.x.x.x", "port" => 80 ) # real backend http server ip and port 
         ) 
       ) 
      #it's important to enable proxy.worked-with-modcache, otherwise mod_proxy will not cooperate with mod-cache 
      proxy.worked-with-mod-cache = "enable" 

 example for lighttpd 1.5.0 

     e.g.: :: 

       cache.support-queries = "enable" #ignore '?' in url 
       cache.bases = ("/data/cache") #write cached files in /data/cache directory 
       cache.refresh-pattern = ( 
          "/$" => "5 update-on-refresh no-expire-header", # update homepage every 5 minutes and on refresh requests without setting expire headers 
          "\.(?i)(js|css|xml)$" => "240", # update js/css/xml every 4 hours and on refresh requests 
          "\.(?i)(htm|html|shtml)$" => "30", # update html/htm/shtml every 30 minutes and on refresh requests 
          "\.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880", # update graphics files every 2 days 
          "\.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request", # cache media file forever 
          "." => "30 update-on-refresh" # default to update every 30 minutes and on refresh requests 
       ) 
       #mod_proxy_core setting, config your backend servers here 
       proxy-core.backends = ( "x.x.x.x:80", "y.y.y.y:80") 
       proxy-core.balancer = "round-robin" # or "sqf" or "carp" 
       proxy-core.protocol = "http" 
       #it's important to enable proxy-core.worked-with-modcache, otherwise mod_proxy_core will not cooperate with mod-cache 
       proxy-core.worked-with-modcache = "enable" 

 }}}