![为什么尽管配置看似正确,Apache 仍从 NFS 提供过时的文件?](https://linux22.com/image/572122/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%B0%BD%E7%AE%A1%E9%85%8D%E7%BD%AE%E7%9C%8B%E4%BC%BC%E6%AD%A3%E7%A1%AE%EF%BC%8CApache%20%E4%BB%8D%E4%BB%8E%20NFS%20%E6%8F%90%E4%BE%9B%E8%BF%87%E6%97%B6%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有两台 CentOS 机器(虚拟化),安装了 NFS 共享,其中的内容如下/etc/fstab
:
<ipaddr>:/mnt/nfsshare /mnt/nfsshare nfs rsize=1024,wsize=1024,timeo=14,intr,cto,relatime 0 0
我已经在每个 Apache 的配置中EnableMMAP Off
都EnableSendfile Off
安装了。连接到 NFS 的另一台服务器偶尔会复制带有更新版本的 CSS 文件(例如,当有人从暂存中应用更改时)。从 shell 来看,此更新似乎已完成(即更新的时间戳并cat
显示正确的数据)。
但是,从浏览器或其他工具加载文件时显示的是过时的版本。有时,我甚至会看到不同的响应(两个 Apache 服务器是负载平衡的)。一段时间后,更改似乎会完成,Apache 将返回正确的文件内容,但通常需要一两分钟。
答案1
您可以尝试用“noac”替换“cot”并完全禁用缓存,但是如果您的生产实例是唯一出现此缓存的地方,则可能会受到一些性能损失。另一个选项是设置 acregmax=10,这将使属性缓存时间不超过 10 秒——默认情况下,所有属性缓存 60 秒,虽然“cto”表示应在 open() 和 close() 上检查属性,但单个 apache 进程可能仍挂在文件句柄或其他东西上。