Project

General

Profile

Docs ModCache » History » Revision 19

Revision 18 (Anonymous, 2008-06-17 17:19) → Revision 19/32 (Anonymous, 2008-06-17 17:22)

[[TracNav(DocsToc)]]  
 {{{  
 #!rst  
 ======================  
 Web Accelerating Cache  
 ======================  
 
 -----------------  
 Module: mod_cache  
  
 	 -----------------  

  
 	 
 	 .. meta::  
 	   :keywords: lighttpd, cache, squid, web cache  
 	   
  
 	   
 	 .. contents:: Table of Contents  
 	 
  
 	 
 	 Description  
  
 	 ===========  
  
 	 *** mod_cache site comes back again since feb. 29, 2008 ***  
  

 Description  
 ===========  
 *** mod_cache site comes back again since feb. 29, 2008 ***   
 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. 
   * Powerful: mod_cache can be used in conjunction with other lighttpd plugins (except mod_deflate and mod_secdownload).    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. 

 With the shared web cache, mod_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 bandwidth up-stream of the server. 

 This is not intended to be a reverse-proxy as one is rarely useful with Lightttpd, as Lighttpd is designed to handle a large number of concurrent requests with minimal resource usage by loading external applications (eg. FastCGI) only when needed, gracefully handling slow user transfers without blocking, and as of Lighttpd 1.5, performing asynchronous file operations.    For more information on optimizing the performance of Lighttpd, see: http://trac.lighttpd.net/trac/wiki/Docs:Performance 

 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.4.18: [http://www.linux.com.cn/modcache/lighttpd-1.4.18.modcache.v.1.4.3.patch] 
  * For lighttpd 1.5.0.r1605: [http://www.linux.com.cn/modcache/lighttpd-1.5.0.r1605.modcache.v.1.3.2.patch] 
  * For lighttpd 1.5.0.r1992: [http://www.linux.com.cn/modcache/lighttpd-1.5.0.r1992.modcache.v.1.4.2.patch] 


 The PCRE library is needed to build mod_cache. 

 Always check for updates before attemping to install this or any other 3rd party module. 

 If the official source is not available there is a google group dedicated to mod_cache: http://groups.google.com/group/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).  
        * flv-streaming: to work with mod_flv_streaming.  
        * nocache: do not cache matched url.  

 Examples 
 ======== 

 NB: load mod_cache before mod_proxy in server.modules or it will not work (cached files will never be used). 

 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)(flv)$" => "0 fetchall-for-range-request flv-streaming", # to work with mod_flv_streaming for flv files 
           "\.(?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)(flv)$" => "0 fetchall-for-range-request flv-streaming", # to work with mod_flv_streaming for flv files 
          "\.(?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" 

 }}}