我们有一个集群环境,我们的网站在此环境中运行。有两个负载平衡的 Web 服务器和一个数据库服务器。所有代码都部署到主服务器,并使用 peersync 软件自动复制到辅助服务器。这是一个 Windows 环境。
除了编辑主题和上传媒体之外,Wordpress 在这种环境下运行良好。问题是,任何上传的内容都需要上传到主服务器,以便复制到辅助服务器。复制不是双向的。在辅助服务器上上传或更改的文件不会同步到主服务器。
当网站管理端的请求被发送到主服务器时,一切如预期。上传的图片被上传到 wp-content/uploads 路径,然后复制到辅助服务器。
编辑主题文件也是如此。WordPress 管理员会针对当前活动的主题编辑正确的文件。
如果负载平衡器将请求发送到辅助服务器,则问题就会暴露出来。如果用户通过管理员上传文件或编辑主题文件,这些文件将进入辅助服务器,而不会复制到主服务器,并且站点会不同步。我尝试在杂项设置对话框中输入网络路径(\primary_server\c$\inetpub\wwwroot...),但 wordpress 似乎不喜欢网络路径。我尝试上传图像时出现错误,我 99% 确定这不是安全问题。它与路径的格式有关。
即使我成功输入了用于图像上传的网络路径,我也不确定如何将主题编辑器指向网络位置,以便对主服务器而不是本地服务器上的文件进行编辑。
我们最初设置了一条规则,告诉负载平衡器“如果请求来自 www1 的子域,则将请求发送到主服务器”,认为我们可以通过让最终用户转到 www1.domain.com/wp-admin/ 来强制所有编辑在主服务器上进行。问题是 wordpress 随后希望将内容中的所有链接写入绝对到 www1,而这并不是我们的意图。如果所有链接和内容都转到 www1,那么该网站就不再具有负载平衡性。
wordpress 可以在我描述的集群环境中工作吗?使用 mod_rewrite 不是一个好选择,因为在 IIS 上,虽然我知道有插件可以启用此功能。
答案1
如果您的负载均衡器允许您这样做,请在 URL 中查找完整管理路径:“www.domain.com/wp-admin/”,然后将该请求发送到主服务器。
出于安全考虑,您应该将 wp-admin 文件夹更改为其他随机名称。
答案2
我通过使用解决了这个问题集群文件系统提供两个服务器共用的挂载点。它比使用 rsync 好得多,因为它可以正确处理删除并支持故障转移 - 任何一个节点都可能出现故障,但所有节点仍将正常工作,并且当它恢复时,它会自动修复任何丢失的文件。
在 lod 均衡器中插入透明 cookie 或使用 IP 粘性可解决会话问题。
处理主题和插件更新稍微困难一些,特别是如果您使用标准包安装 WordPress。这也可以放在 gluster 中,但保留它在外面有性能优势。