我有 apache 虚拟主机:
<VirtualHost IP_WAN:80>
ServerName test.localnet
DocumentRoot /srv/http/localnet/test/trunk/docroot
<Directory /srv/http/localnet/test/trunk/docroot>
Options Indexes
</Directory>
</VirtualHost>
分区 /srv 是 NFS3 挂载的文件系统:
172.16.0.2:/srv /srv nfs nodev 0 0
在服务器端,它通过以下方式导出:
/srv 172.16.0.0/255.255.255.240(rw,sync,no_subtree_check,no_root_squash)
目录 /srv/http/localnet/test/trunk 是到 /srv/http/localnet/test/exports/trunk-v2 的绝对符号链接
在 /srv/http/localnet/test/exports 我导出了 SVN 树(trunk-v1、trunk-v2、trunk-v3)
当我向 apache 询问http://test.localnet时,它提供 200 OK 并从 /srv/http/localnet/test/exports/trunk-v2/docroot 索引
但:
如果我删除符号链接 /srv/http/localnet/test/trunk 并创建一个新版本到另一个版本(ln -s /srv/http/localnet/test/exports/trunk-v3 /srv/http/localnet/test/trunk ),apache给我404 Not Found。大约需要几秒钟/分钟,然后一切都会恢复正常。
如果我在这种情况下执行 ls -la /srv/http/localnet/test/trunk/ ,它会立即恢复正常。我认为 NFS 缓存存在一些问题,但我无法找到问题发生的确切位置以及如何防止它。符号链接占用与前一个相同的 inode,两个目标(旧的和新的)都存在。
在服务器端,我以这种方式安装了 /srv 分区:
/dev/xvda7 on /srv type xfs (rw,nosuid,nodev)
我也使用这个参数:
echo 262144 >/proc/sys/net/core/rmem_max
echo 262144 >/proc/sys/net/core/rmem_default
echo 262144 >/proc/sys/net/core/wmem_max
echo 262144 >/proc/sys/net/core/wmem_default
echo noop >/sys/block/xvda7/queue/scheduler
echo 0 >/sys/block/xvda7/queue/read_ahead_kb
我也在尝试将网络接口的 MTU 调到 9000,但没有成功。
有谁知道,有什么问题吗?为什么 apache 在“手动”刷新目录结构(ls)之前找不到符号链接?非常感谢
翁德拉