我有一个 CentOS 6.5 VM,使用 Apache HTTPD 2.2 作为 Web 服务器,并且我在构建过程中使用 GulpJS。当我更新 CSS 文件时,GulpJS 构建过程运行正常,如果我查看 VM 上的文件,我可以看到更新,但是当通过 Apache HTTPD 提供服务时,文件中没有更改。如果我使用 vi 编辑文件,不做任何更改并再次保存,Apache HTTPD 就会获取更改并输出正确的文件。
我已经禁用 mod_cache 模块(例如,注释掉它的 LoadModule 指令),因为我认为这可能是原因,但这并没有什么区别。
还有其他人遇到过这个问题并知道如何解决吗?
[更新] - 刚刚查看了 httpd 访问日志,我可以看到该文件每次都由 httpd 提供服务,无论是更新之前还是更新之后,但都没有任何变化:
192.168.56.1 - - [22/Jun/2014:09:27:42 +0100] "GET /includes/min/stylesheet.min.css HTTP/1.1" 200 135882 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
192.168.56.1 - - [22/Jun/2014:09:29:22 +0100] "GET /includes/min/stylesheet.min.css HTTP/1.1" 200 135878 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
除了文件长度。这表明 httpd 看到了文件更新,但浏览器中没有更新。我尝试了几种不同的浏览器,清除了浏览器缓存等。但直到我使用 vi 在服务器上编辑文件并再次保存,浏览器才会加载新版本的文件,这让我再次想到 httpd 仍然提供错误版本的文件。真奇怪。
[更新 2] - 我相信这可能与 VirtualBox 和共享文件夹有关。该站点的文件位于主机 (Mac OS X 10.9.3) 上,并使用 NodeJS 在那里编译。它们被编译到一个文件夹中,该文件夹使用 VBox 的共享文件夹与客户操作系统 (CentOS) 共享。如果我通过控制台查看目录中的文件,我会看到:
-rwxrwxrwx. 1 root root 135881 Jun 23 2014 stylesheet.min.css
如您所见,文件中没有正常的月、日和时间,而是月、日和年。这对我来说看起来不合适,但我不知道这意味着什么,也不知道这是否重要。
答案1
找到解决方案了。这是 Apache HTTPD 缓存问题。我重新放入了 mod_cache 和 mod_disk_cache 模块,然后设置了以下指令:
缓存禁用 /
这解决了问题。不知道为什么简单地不加载缓存模块没有达到同样的效果。
更新:虽然这似乎解决了一段时间的问题,但似乎并不是真正的解决方案。问题实际上与在 VirtualBox 上运行的机器以及它所服务的文件有关,这些文件位于主机上并通过使用 vboxsf 安装到客户机上。以下博客文章解释了问题和解决方案:
http://www.frandieguez.com/blog/2013/05/solving-caching-issues-with-vagrant-on-vboxsf/