我已经安装了 nginx,并且在生产过程中一切运行良好,但在开发过程中有时会遇到这个问题。
为了重现该问题,我进行了以下操作:
在公共文件夹中创建一个名为 test.html 的文件,其中包含文本“hello”。
在浏览器中打开 test.html,正确显示“hello”。
修改文件 test.html 以包含文本“hello world”。
加载网页,仍然显示“hello”。
我的第一个猜测是我的浏览器正在缓存这个,但我尝试清除缓存,甚至使用不同的浏览器,或者只是原始 wget,但都一样。
我调查了访问日志,发现当进行更改时,确实会注意到,因为有两次访问状态为 200,并且任何后续没有更改的重新加载都是 304。
此外,服务器在虚拟机中运行并从链接文件夹中获取文件,因此我怀疑虚拟机可能无法正确查看文件,但在虚拟机中加载它可以正常显示更改。
重新启动 nginx 也无济于事。重新启动整个 VM 确实有用,但每次都要这样做太麻烦了。新文件反映得很好,只是对现有文件的修改很麻烦。据我所知,我没有设置任何类型的缓存。
我怀疑 nginx 正在进行某种缓存,无论是在磁盘上还是在内存中,尽管注意到文件已经改变,但在被询问时它仍然返回旧的缓存版本。
只是寻找一些可能的解决方案?
- 更新 -
我查看了配置文件,发现了一些我不明白的、看起来很可疑的东西:
sendfile on;
注释掉这行可以解决问题。有人能解释一下这行比这行有什么用吗?http://articles.slicehost.com/2007/12/13/ubuntu-gutsy-nginx-configuration-1/?
--更新 2--
添加到 Nginx wiki 的信息: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#config-changes-not-reflected