最直接判断源站IP是否暴露是nslookup或dig查询域名A记录是否返回服务器真实公网IP;若开启CDN却返回真实IP,或攻击者用curl -H "Host: 域名" 直连IP能获取响应,则确认暴露。

宝塔面板里怎么确认网站暴露了源站IP
最直接的判断方式是:在本地 nslookup 或 dig 查你域名的 A 记录,如果返回的是你服务器真实公网 IP(比如 123.45.67.89),而你又开了 CDN,那基本就是源站 IP 暴露了。更隐蔽的情况是——CDN 回源时没做 Host 头校验,攻击者直接用真实 IP 访问你的 Nginx,仍能拿到响应(比如返回 200 + 网站内容),这就等于白搭 CDN。
Nginx 配置中必须加 server_name 和拒绝非域名访问
宝塔默认建站会生成带 server_name 的配置,但很多人改配置时删了它,或留空,导致 Nginx 接收所有 Host 头请求。真实 IP 被扫到后,攻击者发个 curl -H "Host: example.com" http://123.45.67.89 就能绕过 CDN 直达源站。
- 确保站点配置里
server_name明确写上你的域名(支持多个,用空格分隔) - 在宝塔「网站」→「设置」→「配置文件」末尾追加一个兜底 server 块:
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
return 444; # 或 403,但 444 是直接断连,更干净
}
注意:如果用了 SSL,default_server 必须同时监听 443 并配好证书(哪怕只是宝塔自签的占位证书),否则 Nginx 启动会报错。
CDN 回源地址必须用内网 IP 或 127.0.0.1,不能填公网 IP
很多用户在 CDN 后台填回源地址时,直接填服务器公网 IP(比如 123.45.67.89)。这会导致两个问题:一是回源流量走外网,浪费带宽;二是万一 CDN 节点被黑或配置错误,可能把源站 IP 泄露给第三方日志或 Header。
- 在宝塔中,站点监听地址保持默认
0.0.0.0:80即可,不用改 - 在 CDN 后台(如 Cloudflare、腾讯云 CDN、阿里云全站加速)设置回源时,填
127.0.0.1或服务器内网 IP(如172.16.0.5) - 确保宝塔防火墙或服务器安全组放行 CDN 厂商的回源 IP 段(Cloudflare 官方有公开列表,腾讯/阿里也有文档)
- 验证是否生效:在网站 PHP 中加一行
echo $_SERVER['REMOTE_ADDR'];,访问域名,看到的应该是 CDN 节点 IP,而不是你自己的公网 IP
额外加固:开启宝塔「防CC攻击」和 Nginx 的真实 IP 透传
CDN 只是第一道门,它背后还得让 Nginx 正确识别访客真实 IP,否则日志、限流、WAF 都会失效。宝塔自带的「防CC攻击」模块依赖 $remote_addr,如果没透传,它只会把 CDN 节点 IP 当作攻击源封掉,反而误伤。
- 确认 CDN 开启了
X-Forwarded-For或Cf-Connecting-Ip(Cloudflare 用后者)头传递 - 在宝塔「网站」→「设置」→「配置文件」中,在
http块开头加入:
set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; # 填你所用 CDN 的全部回源 IP 段(Cloudflare、腾讯、阿里官网都提供) real_ip_header X-Forwarded-For; real_ip_recursive on;
然后重启 Nginx。做完这步,$remote_addr 才是真实用户 IP,宝塔的防 CC、日志统计、fail2ban 才真正起作用。
源站 IP 隐藏不是配一次就完事的事——CDN 切换、宝塔升级、Nginx 配置重载都可能覆盖掉关键段落。建议把兜底 server { return 444; } 和 set_real_ip_from 规则做成模板,每次新建站点时手动补上。

















