我正在使用lighttpd来提供静态文件。 我在一个定期更新的目录中有一堆图像。 这将改变文件内容(和文件大小)以及修改date,但不改变它们的文件名。
当我通过http访问这些文件时,不会考虑这些更新,并且轻微地服务于旧文件。 我可以手动将文件重命名为不同的东西,然后lighttpd将返回一个404错误,如果我重新命名我的文件,我会得到正确的更新版本。 看起来像lightty正在使用它自己的某种caching机制(这很好)来返回静态文件。 不幸的是,这种机制似乎并没有在文件被修改时自行更新。
我通过Wireshark进行了检查,我的浏览器确实在对文件进行请求,这不是浏览器caching问题。 当它从一个空的caching请求时,它会返回一个200 OK,如果没有,则返回304 Not Modified。 但是该文件返回错误的Last-Modified标头,并不能反映真正的最后修改date。
也许有一些我不知道的configuration指令?
我希望Lighty返回的文件直接反映磁盘上的更改,或者至less能够使caching失效。
更新下面这个问题的人:我find了一个罪魁祸首。 如果我更新一个静态文件,Lighty不会返回新的内容,但是会在其头部返回新的Content-Length,导致垃圾显示。 如果我使用mod_compress压缩文件,问题就会消失,因为mod_compress使用自己的caching系统。 不幸的是,我不能压缩所有的文件(例如图像文件)。 所以这只是一个部分的解决方法,但我会在稍后再回来,并且会很好地find一个解决scheme。
我终于find了问题。 它来自VirtualBox。
在Host(Win)中编辑文件时,guest虚拟机(Linux)中的lighttpd不能正确更新文件内容(但会正确更新文件大小),从而返回裁剪或乱码的内容。
卸载我的共享驱动器并重新安装它们,或直接在guest虚拟机中编辑文件,解决了这个问题。
花了我6个月的时间终于弄清楚了。
你没有提到你是否安装了mod_cache? 该模块在安装时默认为“已启用”。
我不喜欢这个build议,但是打开Etags有帮助吗?
试试这些etag条目,看看他们是否帮助你:
lighthttpd的caching控制规则
尝试将stat引擎caching设置为“禁用”:
server.stat-cache-engine = "disable'
这lighttpd选项为我工作
server.network-backend = "writev"