最稳妥的做法是用NFS挂载统一存储卷,让所有节点读同一份文件;需确保服务端export配置正确、客户端挂载参数严谨(如vers=4.2,hard,intr,acregmin=1)、Apache关闭EnableSendfile并禁用mod_cache_disk,且各节点时间同步、UID/GID一致、路径配置统一。

Apache多节点间静态资源要实时一致,最稳妥的做法是用NFS挂载统一存储卷,让所有节点读同一份文件,而非各自存一份再靠同步工具“追平”。关键不在挂得上,而在挂得稳、读得准、权限对、启动不卡。
NFS服务端配置要点
服务端需导出目录并确保权限与网络可达:
-
/etc/exports 中明确写出共享路径、网段和基础选项,例如:
/var/www 192.168.10.0/24(rw,sync,no_subtree_check,fsid=0) - 不要轻易加
no_root_squash;跨节点场景下应统一所有服务器的www-data用户 UID/GID,避免属主显示为nobody - 修改后必须运行
exportfs -ra生效,仅 reload nfs-server 服务无效 - 确认
rpcbind和nfs-server均已启用,防火墙放行 TCP/UDP 111(rpcbind)和 2049(nfs)端口
客户端挂载必须带关键参数
挂载不是执行一条 mount 命令就完事,参数错一个就可能引发 500 错误或缓存不一致:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 强制使用 NFSv4.2:
-t nfs4 -o vers=4.2,hard,intr,timeo=600,retrans=2,proto=tcp - 禁用属性缓存(
acregmin=1,acregmax=3),防止 Apache 读到过期的文件元信息 - fstab 中务必加
_netdev,x-systemd.automount,避免网络未就绪时 Apache 启动失败 - 挂载点目录(如
/mnt/nfs/www)需提前创建,且 Apache 配置中 DocumentRoot 或 Alias 必须指向该路径下的子目录,不可硬写别名跳转
Apache自身需配合调整
NFS 挂载后,Apache 默认行为仍可能引入本地缓存干扰:
- 关闭内核 sendfile 优化:
EnableSendfile off,否则可能因 NFS 缓存机制返回旧内容或报错 - 若启用了
mod_cache_disk,需定期清理或禁用——Apache 不感知 NFS 文件变更,不会自动失效磁盘缓存 - 所有节点的 Apache 配置必须完全一致,尤其涉及路径、用户、模块加载顺序等;上传接口(如 PHP 的
move_uploaded_file)也应直接写入挂载点,而非本地/tmp或/var/www/uploads
验证与日常保障
上线前和每次变更后都应做这几项检查:
- 在各节点执行
mount | grep nfs确认挂载状态为nfs4且无stale标记 - 用
stat /mnt/nfs/www/index.html查看 mtime,确认多节点返回时间一致 - 手动在服务端更新一个 JS 文件,立即从任一 Apache 节点 curl 请求,验证是否秒级生效
- 所有节点必须开启 NTP 时间同步,偏差超 1 秒易触发
stale file handle错误










