CDN回源 Host 头与源站不符导致请求落到默认站:排查思路与配置要点

来源:互联网 时间:2026-11-02

站点接上CDN之后,一部分页面变404,另一部分正常。把域名解析临时指回源站,同一个地址能打开。缓存清过一遍,回源也点了强制刷新,404照旧,源站的文件确实在。换一个节点再试,有的节点刚推完配置,有的还没生效。

CDN回源时会带一个Host头过去,源站的nginx靠这个头决定走哪个server块。头里写的是哪个域名,nginx就去server_name列表里找,找不到有兜底规则,那套规则在多站点共存时最容易出岔子。

一台机器上跑着好几个站的时候,这一步很关键。回源Host如果被配成加速域名,而源站的server_name里只写了源站域名,两边对不上,请求就落到默认站上。那个站底下没有这个路径,返回的是它自己的404页面。页面标题是另一个站的,返回码是404,看起来像文件丢了,其实是走错了门。

判断的办法是绕开CDN直接打源站,你带上不同的Host。curl加--resolve参数可以把域名指到指定IP,再用-H把Host分别改成源站域名和加速域名各试一次。两次结果不一样,就是这一处的问题。

CDN控制台里通常有三个选项,回源Host用加速域名、用源站域名、或者自定义。用源站域名最省事,源站配置不用动,证书按源站域名走。用加速域名的话,源站的server_name要把加速域名加进去,否则就落到默认站。自定义那一项填错一个字母也会落空,改完一定要回源验一次。

默认站这一层单独说。nginx在没有任何server_name匹配时,会用listen后面带default_server的那一个;没显式标过,就取配置文件里排在最前的那个。这个顺序由include的文件名和写法决定,看着像随机。HTTPS回源还多一层,SNI是握手里声明目标域名的字段,它要和Host一致,证书不匹配时握手直接失败,报错在CDN侧表现为回源超时,或者厂商自定义的5xx(Cloudflare是521),不是404。有些CDN默认把回源协议设成跟随用户,用户在HTTPS下访问就走HTTPS回源,源站只开了80端口的话一样失败。这类失败在浏览器里只显示一个笼统的错误页,状态码要回CDN的日志里看。

改法是三个域名对齐,加速域名、回源Host、源站server_name写成同一个。多站共存时把默认站显式标出来,别让排在最前的那个server块白白担任这个角色。改完在源站grep一遍server_name,确认没有第二个块也声明了同名域名。

现在回源Host配的是源站域名,源站的server_name里也补了加速域名做兜底,默认站显式标在了一个空站点上。上线之后404消失,源站access_log里能看到CDN节点的IP和正确的Host。这类问题在换CDN厂商、加第二个站点、给站点补证书之后都容易复发,改完配置记得回源测一次,别只看首页能不能开。

相关文章

标签:

A5创业网 版权所有