我有apache
/mod_dav
和davfs2
所有在同一主机上。davfs2
用于将 Apache 服务的内容挂载到本地文件系统 - 一种环回。目的是所提供的文件内容是动态的,并且通过 php 来自 postgres 数据库。在这种情况下,该文件是定期更改并由邮件程序读取的电子邮件页脚/免责声明。
这大部分工作得很好,但是当我尝试将cp
文件从 dav 目录转移到文件系统的另一部分时,它cp
似乎不会触发 davfs2 中的“文件是否已更改”检查 - 它只是获取缓存的副本。请注意,php 文件并未更改,仅更改了动态内容,因为数据库中的某些内容已更新。
另一方面,如果cp
5 秒后再次进行操作,则会复制正确的文件内容。我最终得到了这样的脚本:
#!/bin/bash
cp /root/pgdav/disclaimer.html /etc/postfix/disclaimer.html
sleep 5
cp /root/pgdav/disclaimer.html /etc/postfix/disclaimer.html
php中缓存相关头设置如下:
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
我已经file_refresh 0
入驻davfs2.conf
了
我的问题是:是否还缺少其他一些设置来纠正此行为?
答案1
我从 davfs2 邮件列表中得到了答案,并认为我应该在这里分享:
一旦我确定我正在提供 ETag 标头,问题就消失了。