集成 CDN 后,如果网站内容无法加载或加载方式不当,请使用本指南快速解决常见的 CDN 问题。
确定问题所在:网站还是 CDN 资源
从源(您的网站)请求任何应通过 CDN 交付的文件,并确保获得 HTTP 200 响应代码。
例如:
- example.com 是您网站的域名;
- http 是协议;
- image.png 是您要请求的文件路径;
请求内容如下:
curl -I http://example.com/image.png
如果文件能正确打开(HTTP 200 响应代码),则问题与网站无关。在这种情况下,请按照下面的说明检查 CDN 选项。如果文件加载失败(HTTP 4xx 或 5xx 响应代码),则问题与网站源有关,与 CDN 无关。
检查 CDN 的设置
1. 检查个人域的配置
如果个人域名的 CNAME 记录未配置或配置错误,则内容将从源而非 CDN 交付。检查 CNAME 记录并正确设置:
1. 进入资源设置,查看设置指南。如果左侧有 x 步骤标签,请单击该标签。如果没有标签,请转到下一节。
2. 单击检查 DNS 设置状态按钮。
如果未设置 CNAME 记录,则会出现此通知:
如果有通知,请转到步骤 3。如果没有,请转到下一个故障排除部分。
3. 打开 Gcore DNS 查询,输入您的域名,按 "搜索",选择 CNAME 选项卡。您将看到与域名相关的 CNAME 记录。将 CNAME 记录的值与设置指南中提供的值进行比较,两者应完全相同。
如果它们完全相同,则表示您已经用正确的值配置了 CNAME 记录,但 DNS 记录没有更新。15 分钟后再次重复步骤 2。必须显示记录已配置。
如果您看到 "未找到记录 "标签:
根据 "DNS 设置中的 CNAME 记录配置 "指南添加 CNAME 记录。
4. 保存更改并等待记录更新。通常需要 15 分钟。但如果您最近更改了域名的 NS 服务器,可能需要 24 小时才能更新 DNS 记录。
再次尝试向 CDN 申请内容。如果是个人域名设置问题,问题就不会再发生了。
2. 选中主机头选项
如果 Host 标头与网站源不匹配,您的网站将无法处理来自 CDN 的请求,也就无法加载内容。要检查主机标头并正确设置,请执行以下操作
1. 进入 "资源设置",找到 "主机标头 "选项。
2. 复制 Host 头信息的值。
3. 在终端或控制台中运行以下命令:
curl -H "Host: example.com" -I http(s)://10.0.0.1/image.png
解释:
- example.com 是主机标头的值
- http(s)://10.0.0.1/image.png,http(s) 取决于源使用的协议,然后是网站源的 IP 地址和通过 CDN 交付的文件路径,不含域名。
4. 如果看到响应代码 2xx,说明问题与主机标头无关。请转到下一个故障排除部分。
如果响应代码为 4xx 或 5xx,则表示 Host 头信息未正确设置。要解决这个问题:
如果只在 CDN 上集成了一个网站,请在主机标头选项中指定其实际域名,然后清除 CDN 缓存。
如果您在 CDN 上集成了多个网站或应用程序(具有多个源的源组),则每个网站或应用程序都必须接受指定的主机标头。管理源并清除 CDN 缓存。
3. 检查 CDN 资源是否处于活动状态。
如果您的 CDN 资源开始收到 403 状态代码,那么可能是因为您的 CDN 资源处于非活动状态。要检查这一点,请进入 CDN 资源设置并选中 "内容可用性 "选项。要使 CDN 正常工作,必须启用该选项。
4. 选中 "原点拉动协议 "选项
如果您选择了不合适的原点拉取协议(HTTP、HTTPS 或两者),CDN 资源将以错误或重定向的方式从您的网站请求内容。要检查协议选择是否正确并纠正错误,请执行以下操作
1. 查找网站使用的协议。您可以在浏览器地址栏的域名左侧看到协议类型。如果有挂锁图标:
表示您的网站通过 HTTPS 协议运行。如果复制域名,将复制如下:
https://example.com
如果您看到 "不安全 "标签:
表示您的网站通过 HTTP 运行。如果复制域名,则会复制如下:
http://example.com
也有可能原点上的内容同时通过 HTTP 和 HTTPS 提供。要检查这一点,请使用 http://example.com 和 https://example.com 协议打开网站。
2. 2. 进入 "资源设置",找到 "起源拉动协议 "选项。您将看到所选的协议。
3. 将步骤 1 中的协议与步骤 2 中的值进行比较。如果两者相同(例如,网站通过 HTTP 运行,且在 "Origin pull protocol"(起源拉动协议)选项中设置了 HTTP),则问题与协议无关。请转到下一个故障排除部分。
如果不同,请转到下一步。
如果它们不同,请转到下一步。
4. 根据 Origin. 指定起源和起源拉取协议指南。选择网站使用的协议类型。保存更改,然后清除 CDN 缓存。
5. 选中 SSL 选项
如果启用了 SSL 选项,但未添加个人域(如 cdn.example.com)的 SSL 证书或添加时出现错误,则无法通过 CDN 获取内容,或在浏览器中看到连接不安全的通知。
要检查 SSL 配置并正确设置,请进入资源设置并找到 SSL 选项。确保启用 HTTPS 选项已启用。
SSL 配置有两种类型: 获取免费的 Let's Encrypt 证书和添加或选择自己的 SSL 证书。在这两种情况下,请在签发/添加证书后等待 15-30 分钟,以便更新注册。
故障排除情况取决于所选的 SSL 证书类型。
免费 Let's Encrypt 证书
1. 返回个人域故障排除部分,确保 CDN 资源的个人域的 CNAME 记录存在。如果没有,请添加。否则 Let's Encrypt 将无法签发证书。如果是这样,请进入下一步。
2. 进入 "资源设置",找到 "规则 "部分。如果没有规则,请进入下一步。
3. 确保没有任何规则拒绝向 CDN 资源的个人域 (CNAME) 发送请求。Let's Encrypt 会向你的个人域发送请求以签发证书。如果请求被拒绝,则签发失败。要确定规则是否阻止请求,请打开每条规则并查看规则模式字段。如果看到值为
/*
or
((?!(jpeg|gif|png|pdf|jpg|css|js|woff|woff2|ttf)).)\*$
该规则拒绝个人域的请求。要解决证书签发问题,请删除该规则或更改其模式。下次 Let's Encrypt 发送请求时,就会成功签发。
个人 SSL 证书
1. 在终端或控制台运行以下命令:
curl -I https://cdn.example.com/image.png
解释:
- cdn.example.com 是个人域名 (CNAME)
- image.png 是通过 CDN 传播的文件路径,不含域名
如果显示 2xx 响应代码,请执行下一步。
如果在命令输出中看到以下错误
curl: (77) schannel: next InitializeSecurityContext failed: SEC\_E\_UNTRUSTED\_ROOT (0x80090325)
表示证书是自签名的。自签名证书不适合用于内容传输。在这种情况下,请向证书颁发机构 (CA) 颁发新证书,并按照 "如何在 SSL 证书部分添加个人 SSL 证书" 指南进行添加。然后清除 CDN 缓存并尝试再次请求内容。
2. 打开网站,请求任何通过 CDN 交付的文件。点击挂锁图标或不安全标签并选择证书。查看以下值:
- 证书对哪个域有效
- 有效期
如果你看到证书是为你的资源的个人域签发的(如果你看到 *.example.com,这意味着你使用的是通配符证书,它提供你的所有子域,包括 cdn.example.com),并且证书没有过期。进入下一步。
如果没有,则需要更新证书(如果问题是由过期引起的)或为 CDN 资源的个人域签发新证书。
3. 访问 SSLlabs 网站,在 "主机名 "字段中输入个人域名,然后按 "提交 "按钮,如下所示:
检查需要几分钟时间。如果没有发现链问题或评级为 A+,说明错误与 SSL 无关。转到下一部分。
如果您发现以下 B 级或连锁问题
SSL 证书链不完整或添加方式错误。进入控制面板的 SSL 证书部分。删除错误的证书,然后根据 "如何在 SSL 证书部分添加个人 SSL 证书" 指南重新添加。
6. 检查缓存选项
如果缓存选项配置错误,则会出现缓存流量百分比低或内容加载缓慢的情况。
检查缓存选项并正确设置:
1. 进入仪表板部分,点击总流量。
2. 设置缓存命中率过滤器、CDN 资源和适当的日期。如果缓存命中率流量小于 60%,则表示有少量内容从缓存中传输。
在这种情况下,请确保您在两天前运行过 CDN 资源。缓存需要这段时间 "热身"。如果没有,请等待两天。此外,您需要有大量来自最终用户的请求来缓存所请求的内容。如果请求数量较少,无论设置如何,缓存都会在 36 小时内被清除。尝试增加流量。如果问题没有解决,请进入下一步。
如果缓存流量百分比高于 60%,且加载时间不慢,请转到下一部分。
3. 在浏览器或控制台(终端)中请求任何通过 CDN 交付的文件,并检查缓存和缓存控制标头的值。如果至少看到以下一个值,说明缓存设置有问题:
Cache-Control: max-age=0
Cache-Control: private
Cache-Control: no-cache
缓存: 错误
如果看到这些值,请转到下一步。如果没有,请转到步骤 5。
4. 进入资源设置,找到 CDN 缓存选项。根据 "配置和检查 CDN 缓存设置" 指南更改设置。
5. 检查 Set-Cookie 和查询字符串选项。如果它们处于关闭状态,请启用它们。启用这些选项后,CDN 会将带有不同 cookie 或查询字符串的文件缓存为唯一文件。
7. 选中 "清除 "选项
有两个迹象表明,使用 "清除 "选项清除缓存后出现了问题:
- CDN 向用户请求返回错误或过时的文件。
- CDN 缓存中的文件与源文件不匹配。
检查清除选项并修复错误:
1. 清除后等待 15 分钟,直到所有服务器上的缓存都被清除。
2. 在终端或控制台中运行以下两条命令,从源文件和 CDN 请求相同的文件:
curl -I cdn.example.com/image.png
curl -H "Host: example.com" -I http(s)://10.0.0.1/image.png
解释:
- cdn.example.com 是 CDN 资源的个人域名
- image.png 是通过 CDN 传输的文件路径
- http(s) 取决于源使用的协议
- example.com 是主机标头的值
- 10.0.0.1 是网站源的 IP 地址。
3. 比较输出结果,注意以下标头的值:
Content-Length,即对象大小(以字节为单位
ETag,即 CDN 为了解文件是否被更改而比较的字符集
X-Cached-Since,UTC 格式的时间。
如果你发现两个文件的 Etag 和 Content-Length 值不匹配,或者 X-Cached-Since 标头中的日期已经过期,这就意味着出现了错误。在这种情况下,你应该进入下一步。
如果值相同且日期相关,则说明清除操作正确。
4. 尝试根据 "按 URL、模式或全部清除 CDN 资源缓存" 指南重复清除。如果选择 "选择性清除",请注意路径模式。我们建议使用正则表达式服务检查模式是否正确。为此,请在顶行输入要清除的路径模式,并在底部区域输入文件的 URL。如果结果为 "无匹配",则说明路径模式有误。更正路径模式并重复清除。
8. 大文件传输优化
如果您为 CDN 资源启用了 "大文件传输优化 "选项,并开始出现连接终止错误和其他错误,请继续检查以下可能的解决方案:
- 启用了 "大文件传输优化 "选项后,原点上的内容不断更新。
CDN 服务器会以 10 MB 的可缓存片段向原点请求内容,然后将其作为单个文件缓存。如果原点上的文件在其缓存片段组装完成前更新,CDN 服务器将继续从原点提取片段,但无法将其组装成单个文件。
如果禁用分片选项,缓存中的文件就会在过期后立即更新。 但由于边缘服务器存储的缓存不同,文件可能很长时间都不会更新。因此,一个用户可能会收到更新的文件,而另一个用户收到的却是过期的文件。因此,需要在源上的内容更新后立即清除缓存。 - 已启用大文件传输优化选项,但原点不支持该选项。
要检查原点是否支持分片,需要像 CDN 那样分片请求文件:
wget -S http://origin.com/file.mp4 --header="Range: bytes=100-200"
您的系统默认情况下可能无法访问 Wget。在这种情况下,你可以使用任何可以帮助你安装的指南。
当原点不支持优化时,每次尝试连接,程序都会无限期地失败。
如果按照本指南排除故障后问题仍然存在,请通过聊天或发送电子邮件至 support@gcore.com 联系技术支持。您可能遇到了非典型问题,需要技术专家的帮助。我们将竭诚为您服务!
评论
0 条评论
请登录写评论。