我正在使用 lighttpd 来提供静态文件。我在一个经常更新的目录中有一堆图像。这将更改文件内容(和文件大小)以及修改日期,但不会更改它们的文件名。
当我通过 http 访问文件时,不考虑更新并且 lighty 提供旧文件。我可以手动将文件重命名为不同的名称,然后 lighttpd 将返回 404 错误,如果我将文件重命名回,我将获得正确的更新版本。似乎 lightty 正在使用自己的某种缓存机制(这很好)来返回静态文件。不幸的是,当文件被修改时,这种机制似乎不会自我更新。
我通过 Wireshark 检查,我的浏览器确实在对文件进行请求,这不是浏览器缓存问题。当从空缓存请求它时,它返回 200 OK,否则返回 304 Not Modified,正如预期的那样。但是该文件返回了一个错误的 Last-Modified 标头,该标头不反映真正的最后修改日期。
也许有一些我不知道的配置指令?
我希望 lighty 返回的文件直接反映在磁盘上所做的更改,或者至少能够使其缓存无效。
关注此问题的任何人的更新:我找到了罪魁祸首。如果我更新静态文件,Lighty 不会返回新内容,但会在其标题中返回新的 Content-Length,从而导致垃圾显示。如果我使用 mod_compress 压缩文件,问题就会消失,因为 mod_compress 使用它自己的缓存系统。不幸的是,我无法压缩所有文件(例如图像文件)。所以这只是一个部分修复,但我稍后会回到它并希望找到解决方案。
我终于找到了问题所在。它来自 VirtualBox。
在Host(Win)中编辑文件时,guest(Linux)中的lighttpd没有正确更新文件内容(但正确更新文件大小),从而返回裁剪或乱码的内容。
卸载我的共享驱动器并重新安装它们,或直接在来宾中编辑文件,解决了该问题。
我花了 6 个月才最终弄明白。
归档时间: |
|
查看次数: |
10865 次 |
最近记录: |