【发布时间】:2020-03-20 07:55:34
【问题描述】:
我有一个非常奇怪的情况,我的应用程序的陈旧版本只有在通过其 CNAME 别名访问它时才会被提供。
该应用是使用 Webpack 构建并托管在 Zeit NOW 上的静态节点应用。如果我使用直接的 Zeit URL 访问它,我将获得最新版本和正确的 JS 资产:
https://nates-app.now.sh/index.html -> https://nates-app.now.sh/client/index.eb53e753.js (current)
在 AWS Route53 中,我将 CNAME 设置为别名 www.nates-app.com 到 https://nates-app.now.sh。但是,将我的浏览器指向https://www.nates-app.com 会导致index.html 过时。更奇怪的是,陈旧的 index.html 页面需要陈旧的 JS 和 CSS 资产,这些资产也被成功返回:
https://www.nates-app.com/index.html -> https://www.nates-app.com/client/index.f64812dd.js (stale)
旧版本已超过 48 小时。
Dig 显示几乎相同的结果。 dig nates-app.now.sh 导致以下 ANSWER 部分:
;; ANSWER SECTION:
nates-app.now.sh. 60 IN A 1.2.3.4
nates-app.now.sh. 60 IN A 4.3.2.1
dig www.nates-app.com 产生相同的输出,只有一个(预期的)添加显示 ANSWER 部分中的 CNAME:
;; ANSWER SECTION:
www.nates-app.com. 300 IN CNAME https://nates-app.now.sh.
nates-app.now.sh. 60 IN A 1.2.3.4
nates-app.now.sh. 60 IN A 4.3.2.1
我没有将 AWS Cloudfront 或任何其他 CDN 用于静态资产。
我显然已经清除了浏览器的缓存,甚至关闭和打开了我的 VPN。同事从不同的 ISP 访问互联网时会看到同样的情况。
那么,万维网中的什么可以缓存我网站的(非常)旧版本的 HTML 和随附的资产?
【问题讨论】:
-
我相信这符合“软件开发独有的实用、可回答问题”的指导方针。
-
目标 Web 服务器不知道两个主机名之间的 CNAME 关联——它不知道为什么流量路由到它,因为它只看到传入的
Host标头——所以很可能的解释是它将两个主机名视为两个单独的站点,问题是“为什么?” (为了说明这一点,创建另一个 CNAME 从您的完全不同的域指向同一个地方,您会看到 Web 服务器不知道要提供什么内容,并返回错误或通用页面。)可能是一个问题与 Route 53 无关的网络托管服务提供商。
标签: amazon-web-services networking dns amazon-route53 vercel