Apache2 当符号链接documentroot时,NFS分区出现Apache 404错误

Apache2 当符号链接documentroot时,NFS分区出现Apache 404错误,apache2,symlink,nfs,performance,Apache2,Symlink,Nfs,Performance,我有apache virtualhost: <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>

我有apache virtualhost:

<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    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请求时,它提供200 OK和来自/srv/http/localnet/test/exports/trunk-v2/docroot的索引

但是:

如果我删除symlink/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缓存存在一些问题,但我无法找到问题发生的确切位置以及如何预防。符号链接与前一个索引节点占用相同的索引节点,旧索引节点和新索引节点都存在

在服务器端,我以这种方式安装了/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之前找不到符号链接?非常感谢

Ondra

解决方案似乎是:

对于安装了NFS的DocumentRoot,如果在httpd映射内存时删除或截断了文件,则httpd可能会由于分段错误而崩溃

这正是删除页面路径中的符号链接时的情况。
希望它能帮助其他人:-

请用更正的内容编辑您的帖子。已编辑。。很抱歉,我找不到“编辑”按钮。每次都是第一次。花了我一些混乱,以找出如何格式化代码作为代码,无法理解常见问题解答。。。
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