CDN回源端口设置,源站只允许CDN访问
把CDN回源端口改成非默认端口,再让源站防火墙只放行CDN节点IP,是防止别人绕过CDN直接攻击源站的常见做法。
本文按零基础可执行的方式,讲清Nginx监听端口修改、云安全组放行、CDN回源配置、源站白名单和验证步骤。
先判断你的场景和准备条件
适用场景:源站已经接入CDN,但担心攻击者通过真实IP直接访问源站。
核心思路是让源站只接受来自CDN回源节点的请求。
准备条件:
- 一台源站服务器,已安装Nginx或宝塔面板。
- CDN控制台可修改回源端口和回源协议。
- 能登录云服务器安全组或本机防火墙。
- 获取CDN服务商提供的回源节点IP段(在CDN控制台或官方文档中查询)。
注意:不同CDN厂商的回源IP段会更新,建议以官方控制台或文档实际显示为准。
修改源站监听端口
登录源站,编辑Nginx站点配置。
宝塔面板路径:网站 → 设置 → 配置文件。
把原来的监听端口改成自定义端口,例如8443:
server {
listen 8443 ssl;
server_name example.com;
ssl_certificate /www/server/panel/vhost/cert/example.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
如果是HTTP回源,把listen 8443 ssl;改为listen 8080;。
保存后重载Nginx:
nginx -t
systemctl reload nginx
看到test is successful和重载无报错,说明端口修改生效。
放行安全组和防火墙
只改Nginx端口不够,云服务器安全组和系统防火墙都要放行新端口。
云安全组入方向添加规则:
- 协议:TCP
- 端口:8443(或你设置的回源端口)
- 来源:CDN回源节点IP段,不要填0.0.0.0/0
系统防火墙以firewalld为例:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="CDN节点IP/24" port port="8443" protocol="tcp" accept'
firewall-cmd --reload
firewall-cmd --list-all
如果使用宝塔面板,可在安全 → 防火墙中添加入站规则,来源IP同样限制为CDN节点段。
在CDN控制台设置回源端口
进入CDN控制台,找到域名配置中的回源设置:
- 回源协议:HTTPS
- 回源端口:8443(与源站监听端口一致)
- 回源地址:源站公网IP
保存后等待配置下发,通常几分钟内生效。
关键判断:回源端口必须和源站Nginx监听端口完全一致,否则CDN会报502或回源超时。
验证源站是否只允许CDN访问
验证分两步。
第一步,用本地电脑直接访问源站IP加端口:
curl -I https://源站IP:8443 --resolve example.com:8443:源站IP
预期结果:连接超时或被拒绝,说明非CDN来源无法直连。
第二步,通过CDN域名访问:
curl -I https://example.com
预期结果:返回200或正常状态码,说明CDN回源链路正常。
如果第一步仍能返回内容,说明安全组或防火墙白名单没生效,需要回查来源IP是否填错。
容易踩的坑
- 只改Nginx端口,没放行安全组,导致CDN回源失败。
- 防火墙来源IP填了旧CDN节点段,CDN节点更新后回源中断。
- 回源协议选了HTTP但源站只监听HTTPS,出现502。
- 忘记放行健康检查端口,CDN显示源站异常。
- 源站同时存在多个站点,修改时误改了其他站点的监听端口。
建议每次调整后都按上面的验证步骤复查一次,并定期核对CDN官方回源IP段。
常见疑问
改了回源端口后,源站原来的80和443端口要不要关闭?
如果源站不再直接对外提供Web服务,建议关闭或限制80、443的入方向访问,只保留CDN回源端口,减少被扫描的风险。
CDN回源IP段会变吗?
会。
CDN服务商可能调整节点IP,建议关注官方公告,或使用控制台提供的回源IP列表定期更新防火墙规则。
源站只允许CDN访问后,本地调试怎么办?
可以临时把自己的办公IP加入白名单,调试完成后移除,避免长期暴露。
如果CDN厂商不提供固定回源IP段怎么办?
部分CDN支持回源鉴权或回源Host校验,可结合这些方式做补充防护,具体以厂商文档为准。