我遇到了一个奇怪的问题,我真的很想了解更多。昨天,我正在我的托管服务器上部署一个新网站。前一天,我在服务器上从切换到PHP 5.2.17
。PHP 5.4.10
奇怪的是,版本仍然显示为5.2.17
?我请一位同事访问该网站,他获得了正确的版本。最后,我关闭了我的 VPN(不用于此特定服务器),我立即看到服务器运行着正确的 PHP 版本。现在我真的很想知道为什么会发生这种情况?我唯一能想到的是,这一定是与正在运行的 VPN 隧道相关的某种缓存问题?
如果我在 webroot 中通过 SSH 创建新文件,则无法通过浏览器访问该文件,而是收到 404 页面。如果我关闭或重新启动 VPN,此错误就会消失。
我在用着朱诺脉冲作为我的 VPN 客户端。
我注意到的另一件有趣的事情是,重新启动 VPN 客户端后,页面再次报告正确的版本。
答案1
在我看来,这听起来像是提供商 + DNS 问题 - 具体来说,我假设提供商有多台机器 - 可能具有共享的网络存储但定期同步系统存储 - 并且通过使用/不使用 VPN,您将路由更改为另一台机器 - 在 PHP 更新之前。
这种情况的迹象是:1. 这不是缓存。重命名 info.php 文件可排除此问题。2. 这是与路由相关的问题 - VPN 会更改路由。3. 这是暂时的问题。
答案2
如果不检查底层设置,就很难确切地说出问题是什么,但是根据您提供的一些信息,考虑到您创建了 info2.php 文件并遇到了同样的问题,因此不太可能是缓存。
这表明您在使用 VPN 时被路由到了另一台服务器。要么通过提供商的负载均衡器,要么通过 DNS(查看是否有多个记录/循环)。您的 VPN 上没有任何可能导致这种情况的缓存(我认为这就是您要说的)。
有许多不同的负载均衡器配置,但其中一种配置基于 IP 的哈希值,这可以解释为什么你总是停留在同一个系统(可能尚未同步你的更改),但从另一个 IP 访问时却被路由到另一个系统。请参阅 nginx 的ip_hash此类平衡器配置的示例。具体来说,
客户端 IPv4 地址的前三个八位字节或整个 IPv6 地址用作哈希密钥。该方法可确保来自同一客户端的请求始终传递到同一服务器,除非该服务器不可用。
至于 DNS 选项,请检查您的域名是否路由到多个 A 记录,也许可以使用类似工具箱因为如果没有实际的 LB,这也可能解释被路由到另一个系统。
类似情况的一件事是最近的代码更改未显示给某些请求。问题是 ENOM 允许 CNAME 到根记录,而根据其界面中的 RFC1034,这是不允许的。然而,实际发生的情况是,他们只是查找 CNAME 的 A 记录(在本例中是 AWS ELB),并为 ELB 解析到的两个 IP 创建了 2 个 A 记录,然后几个月后,当 AWS 更改 ELB 路由到的其中一个 IP 时,这并没有反映出来,因此一些请求被路由到旧的 ELB IP,进而显示旧的缓存代码。