Summary
lighttpd improved is lighttpd 1.4 branch with severals useful modules. We don't choose lighttpd 1.5 because lighttpd 1.5 has no official release till now. Currently mod_cache, mod_mem_compress and mod_mem_cache are included. These modules are written for faster web service, for better user experience.
mod_cache is squid-like cache module. mod_mem_cache is to cache local files into memory. mod_mem_compress is to store compress local files into memory
How to use mod_cache
mod_cache provides following options:
- cache.bases: List of cache directories. For examples: cache.bases = ("/data/cache", "/data2/cache")
- cache.enable: Enable or disable modcache, default to enable.
- cache.domains: List of domains which modcache would try to cache for, without it modcache would cache files of every domains. for examples: cache.domains = ("(^|\.)linux\.com\.cn$") caches *.linux.com.cn. domains.
- cache.support-queries: Try to cache query with '?'. default is 'disable'. When cache.support-queries = "enable" and cache.dynamic-mode = "disable", modcache will treat "/uri?q1" or "/uri?q2" as "/uri" and save them to local cache file of "/uri". When cache.support-queries and cache.dynamic-mode are both enabled, modcache will treat "/uri?q1" and "/uri?q2" as different resource and save them to different local cache files.
- cache.debug: Default to disable debug messages.
- cache.purge-host: pcre regex hosts ip which are allowed to PURGE cache files. for examples: cache.purge-host="^200\.100\.1\." allow 200.100.1.0/24 to purge cache
- cache.refresh-pattern: Key of modcache. See section below for detail.
- cache.ignore-hostname: Includes hostname in saved filename or not. default is "disable".
- cache.dynamic-mode: To support dynamic generated web such as forum/bbs. default is "disable". Note: cache.support-queries needs to be enable.(V1.6.0 feature)
- cache.programs-ext: List of local program extension, such as ".php". modcache will replace them with ".cache.html" to aviod confliction with other modules, such as mod_fastcgi. default is not set
- cache.max-memory-size: Number of MBytes which modcache will use to save cached content in memory. default is 256Mbytes.
- cache.lru-remove-count: Number of content removed from memory when memory is full. default is 256.
Refresh Patterns
cache.refresh-pattern likes squid's refresh-pattern. cache.refresh-pattern format is "url_pcre_regex" => "minutes options". Note: zero 'minutes' means cache forever and minutes option is mandatory. Available refresh-pattern options are:
- ignore-reload: Don't update cache when browser sends 'Cache-Control: no-cache' header. It's default behaviour
- 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.
- ignore-vary: Ignore backend's 'Vary' headers while determining whether to cache.
- ignore-set-cookie: Ignore backend's 'Set-Cookie' headers while determining whether to cache. NOTE: improper usage of this option may cause leak of private information, use it carefully
- no-expire-header: Don't set expires header on matched uri. modcache default to set proper expires header based refresh-pattern rules.
- fetchall-for-range-request: Download all content of file if browser sends 'Range: xxx-yyybytes' header. Useful for multi-thread downloaders(such as flashget).
- flv-streaming: to work with mod_flv_streaming.
- use-memory: use memory to save caches instead of local disk (V1.7.0 feature)
- memory-compress: compress memory-saved content for 'Accept-Encoding: gzip, deflate' requests. Note: 1) use mod_compress to compress local cache files(V1.8.0 feature). 2) turn off gzip compress option on backend server
- nocache: Don't cache matched url.
Notes:
- mod_cache don't cache urls without refresh-pattern rules matched.
- make sure that mod_cache is loaded before mod_proxy.
- right sequence of modules is server.modules = (..., "mod_mem_compress", "mod_compress", "mod_mem_cache", "mod_cache", "mod_proxy", ...);
Cook Books:
For Static Web Server:
server.modules = (
# ...., other modules
"mod_cache", # make sure mod_cache loaded before mod_proxy
"mod_proxy"
)
cache.support-queries = "enable"
cache.bases = ("/data/cache")
cache.refresh-pattern = (
"\.(?i)(flv)$" => "0 fetchall-for-range-request flv-streaming",
"\.(?i)(js|css|xml)$" => "240", # update js/css/xml every 4 hours
"\.(?i)(htm|html|shtml)$" => "30 update-on-refresh", #update html/htm/shtml every 30 minutes and on refresh requests
"\.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880",
"\.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request",
"." => "30 update-on-refresh"
)
proxy.server = ( "/" =>
(
( "host" => "x.x.x.x", "port" => 80 )
)
)For BBS or Forum server
server.modules = (
# ...., other modules
"mod_cache",
"mod_proxy"
)
cache.support-queries = "enable"
cache.dynamic-mode = "enable"
cache.bases = ("/data/cache")
cache.refresh-pattern = (
"\.(?i)(flv)$" => "0 fetchall-for-range-request flv-streaming",
"\.(?i)(js|css|xml)$" => "240",
"\.(?i)(htm|html|shtml)$" => "30",
"\.(?i)(jpg|bmp|jpeg|gif|png)$" => "2880",
"\.(?i)(rar|zip|wmv|avi|mp3|ape|rm|mpeg|mpg|wma|asf|rmvb|flv)$" => "0 fetchall-for-range-request",
".(?i)php$" => "5" # update php request every 5 minutes
)
proxy.server = ( "/" =>
(
( "host" => "x.x.x.x", "port" => 80 )
)
)
#cache.programs-ext = (".php") # uncomment this if mod_fastcgi was loaded on this lighttpd serverChangelog
Stable Version 1.8.2, 11/20/2009
- fix bug of freeing shared buffer
Stable Version 1.8.1, 11/01/2009
- 'ignore-set-cookie' option added
- improve performance of mod_cache's memory cache
Stable Version 1.8.0, 06/06/2009
- 'support-accept-encoding' and 'try-gzip-deflate-only' options removed, 'memory-compress' and 'ignore-vary' options added
Stable Version 1.7.0, 04/30/2009
- support to save content in memory. please read above docs about V1.7.0 feature
Stable Version 1.6.3, 02/18/2009
- support to save gziped response to local cache
Stable Version 1.6.2, 02/17/2009
- v1.6.2 for 1.4.21 = v1.6.0 for lighttpd 1.4.19
Stable Version 1.6.0/1.6.1, 09/01/2008
- support dynamic generated web servers such as bbs/forum servers(see above config example)
- v1.6.0 for lighttpd 1.4.19 = v1.6.1 for lighttpd 1.5.0 r1992
Stable Version 1.4.4, 04/09/2008
- apply mod_proxy.c fix from medic123de#gmail
- upgrade modcache v1.4.4 to lighttpd 1.4.19
Stable Version 1.4.2/1.4.3, 02/29/2008
- fix bug on 'fetchall-for-range-request' option
- can work with mod_flv_streaming module
- backport modcache v1.4.2 to lighttpd 1.4.18 as modcache v1.4.3
Stable Version 1.4.1, 09/23/2007
- upgrade lighttpd 1.5 to r1992
- put splaytree.c into modcache.c
- fix memory leak on handler_ctx usage
- fix memory leak on splaytree_splay usage
Stable Version 1.4, 05/03/2007
- upgrade lighttpd 1.5 to r1811
- status page for mod_status added
- cache.ignore-hostname added
- bugfix for checking cachehd file
Stable Version 1.3.2, 02/08/2007
- upgrade lighttpd 1.5 to r1605
- fix bug of saving partial content of backend server
- update logic of saving cache file
Stable Version 1.3.1, 01/29/2007
- upgrade lighttpd 1.5 to r1540
- two refresh-pattern options added: override-expire, ignore-cache-control-header
Stable Version 1.3, 01/23/2007
- porting modcache 1.2 to lighttpd 1.5 trunk(r1524), no new feature added
Stable Version 1.2, 11/28/2006
- fix fetch-all-for-range-request handling with http servers such as Apache
- use splaytree instead hash table to avoid collision of Range-Request or Cache Save handling
Stable Version 1.1, 11/17/2006
- cache.denyurls removed in favor of refresh-pattern's nocache options
- set proper RFC-compliant expire headers based on refresh-pattern rules and no-expire-header option added
- PURGE method supported! for examples: Use 'PURGE /uri HTTP/1.1\r\nHost: www.examples.com\r\n\r\n' to delete cache file of http://www.examples.com/uri.
- bugfix in update_response_header_by_asis function
Stable Version 1.0, 10/27/2006
- V1.0 has been tested for more than 2 months on heavy traffic servers and worked as expected. It is quite stable!
- Right now V1.0 only supports static website very well, for better dynamic content caching, please wait for upcoming releases.