CDN回源配置怎么填:回源Host、回源协议与真实IP排查

    发布时间:2026-09-16 05:00 更新时间:2026-09-16 05:00 阅读量:0

    很多人第一次接CDN,卡住的地方不是域名解析,而是控制台里那一排回源设置:回源地址填什么、回源Host写域名还是IP、回源协议选HTTP还是HTTPS、缓存规则要不要动。填错一项,表现可能是整站502、可能是HTTPS站点被回源成HTTP导致跳转死循环,也可能是源站日志里全是CDN节点的IP,怎么都找不到真实访客。下面按配置顺序把每一项的填写逻辑讲清楚,最后给出回源异常时的排查顺序。

    回源地址、回源Host与回源协议怎么填

    回源地址是CDN节点去哪里取内容,一般填源站公网IP或源站域名。如果源站前面还有一层负载均衡,就填负载均衡的地址。注意源站安全组或防火墙要放行CDN回源节点网段,否则表现就是CDN侧超时、用户看到5xx。各厂商的回源节点IP段会变化,具体以官方文档公布的列表为准,不要凭记忆写死。

    回源Host是回源请求里HTTP头的Host字段,它决定了源站Nginx按哪个server_name匹配站点,也决定了源站上跑的是哪个虚拟主机。最常见的错误是回源地址填了IP、回源Host也留空或填成IP,结果源站把请求交给了默认站点,返回另一个网站的内容或者直接404。正确做法是:回源Host填你源站上实际配置的站点域名,比如www.example.com,哪怕回源地址是IP。如果源站只用一个域名对应一个站点,回源Host和加速域名保持一致通常最省事。

    回源协议指CDN节点用什么协议访问源站,可选HTTP、HTTPS或协议跟随。源站已经全站HTTPS,就选HTTPS,并且回源端口填443;如果源站只在80端口提供内容,就选HTTP,端口80。协议跟随的意思是用户用什么协议访问CDN,回源就用什么协议,适合源站两种都支持的情况。这里有个常见坑:源站做了HTTP强制跳HTTPS,而回源协议选了HTTP,节点请求80端口后收到301,如果CDN没有正确处理跳转,用户侧就可能出现重定向循环。遇到循环,先看回源协议是否和源站跳转策略冲突。

    还有一个容易忽略的项是回源端口和SNI。源站用HTTPS且同一IP上跑了多个证书站点时,回源配置里通常需要开启SNI或指定回源Host,让源站返回正确证书,否则会出现证书不匹配的回源失败。不同厂商叫法不同,以控制台实际选项和官方文档为准。

    缓存规则:哪些能缓存,哪些必须回源

    缓存规则决定了CDN节点保存什么、保存多久。默认策略一般是按文件扩展名缓存静态资源,动态请求不缓存。可以按这几类来设置:图片、CSS、JS、字体等静态文件设较长缓存时间;HTML页面按业务决定,资讯类可以短缓存,登录后页面、购物车、后台路径必须设为不缓存。

    判断一个请求能不能缓存,看它是否因用户而异。带Set-Cookie响应的接口、带Authorization头的请求、URL里带随机参数的请求,通常都不应该缓存。后台路径、接口路径、支付回调路径建议直接配置为不缓存,避免不同用户拿到同一份缓存内容。缓存键默认是URL,如果站点会按UA或语言返回不同内容,需要在缓存键里加上对应维度,具体配置项各厂商差异较大,以官方文档为准。

    刷新缓存是发布新版本后的常规动作。改了CSS或JS,如果文件名带hash,可以只刷新对应文件;如果文件名固定,就要刷新目录或全站,否则用户拿到的还是旧文件。这里建议给静态资源加版本号或hash,比反复刷缓存更省心。

    源站怎么拿到真实访客IP

    接入CDN后,源站看到的连接来源是CDN节点,直接取remote_addr只能得到节点IP。真实访客IP一般在回源请求的X-Forwarded-For头里,格式是客户端IP, 代理1, 代理2,越靠左越接近原始客户端。Nginx可以用realip模块把它还原成remote_addr,日志和程序里取到的就是真实IP。

    # 以CDN官方公布的回源节点网段为准,示例仅作写法参考
    set_real_ip_from 203.0.113.0/24;
    set_real_ip_from 198.51.100.0/24;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    
    server {
        listen 80;
        server_name www.example.com;
    
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080;
        }
    }
    

    改完用nginx -t检查语法,再nginx -s reload平滑生效。验证方法是访问一次页面后看源站访问日志,第一列应该是你的真实公网IP,而不是CDN节点IP。如果日志里仍是节点IP,依次检查:set_real_ip_from是否覆盖了实际回源节点、real_ip_header名字是否和CDN发送的头一致、请求是否真的经过了这层Nginx。

    PHP程序里拿IP不要直接用$_SERVER['REMOTE_ADDR'],在Nginx已还原的情况下它已经是真实IP;如果没做还原,可以解析HTTP_X_FORWARDED_FOR取第一个值,但要注意这个头可被伪造,只有在流量必经CDN、源站不直接暴露公网时才可信。源站防火墙最好只允许CDN回源网段访问,这样伪造头的请求根本到不了源站。

    回源异常排查顺序建议这样走:先确认源站安全组是否放行回源网段;再用curl带Host头直连源站,确认源站本身正常,例如curl -I -H "Host: www.example.com" https://源站IP/;接着核对回源Host是否与源站server_name一致;然后检查回源协议与源站跳转策略是否冲突;最后看CDN侧的缓存命中与回源日志。多数“接了CDN就502”或“HTTPS站点回源后证书报错”,问题都出在回源Host与回源协议这两项上。

    配置完成后,建议把源站访问日志、CDN回源日志各观察一天,确认真实IP还原生效、缓存命中率符合预期,再去做后续的图片压缩、HTTP/2等优化。回源配置本身不难,难在每一项都要和源站的实际配置对得上,填之前先想清楚源站上这个域名是怎么被Nginx匹配的,基本就不会踩坑。

    继续阅读

    📑 📅
    宝塔面板计划任务做网站自动备份:数据库与文件打包、异地存储配置 2026-09-15
    WordPress数据库膨胀排查:wp_options自动加载与孤立表清理 2026-09-15
    Let's Encrypt证书自动续期失败排查:certbot renew定时任务与webroot验证 2026-09-15
    Nginx反向代理缓存实战:proxy_cache_path配置与命中率排查 2026-09-15
    大文件上传总失败:php.ini与Nginx三处限制如何协调放行 2026-09-14
    WordPress固定链接改版后老链接404:rewrite与301重定向保住收录 2026-09-16
    宝塔面板MySQL与PHP版本切换:兼容性检查、扩展重装与白屏处理 2026-09-16
    宝塔PHP扩展装不上怎么办:编译报错与权限排查 2026-09-16
    Nginx与PHP-FPM超时怎么配:三处超时参数的关系与取舍 2026-09-16
    WordPress多站点网络搭建:子域名与子目录怎么选、域名映射与迁移注意点 2026-09-16