Nice article.
About lighttpd and expiring/caching I would like to add a few things.
About expiring you can even do some more nifty things like:
$HTTP["url"] =~ "\.png$" {
expire.url = ( "" => "access 48 hours" )
} else $HTTP["url"] =~ "\.jpg$" {
expire.url = ( "" => "access 48 hours" )
} else $HTTP["url"] =~ "\.css$" {
expire.url = ( "" => "access 48 hours" )
}
ETags are on by default on lighttpd and if you run multiple servers, you should either disable it or configure it properly. The problem with disabling it is that you can't use mod_compress.
By default ETags are based on the inode of the files. If you have multiple servers most likely the files are not using the same inode numbers so the client's browser would need to cache N copies of the file, where N is the number of servers you run.
You can for example disable the inode usage for etags and enable mtime or size:
etag.use-inode = "disable"
etag.use-mtime = "enable"
You can read more about etags here:
developer.yahoo.com/performance/rul
...
You can read more about etags and lighttpd here:
trac.lighttpd.net/trac/wiki/etag.us
...
trac.lighttpd.net/trac/ticket/1209
trac.lighttpd.net/trac/wiki/Docs%3A
...