宝塔反向代理不能自动隐藏真实IP,需确保目标URL带协议、发送域名正确、/etc/hosts强制解析、清理server/X-Powered-By响应头,并禁用宝塔强制HTTPS以防Cloudflare共存时泄露源站。

宝塔面板加反向代理本身不能自动隐藏真实 IP,关键在「代理链路是否被绕过」和「响应头是否暴露服务特征」。只要目标服务器直接响应、Nginx 头没清理、DNS 或跳转泄露源站,IP 就算不暴露在首页,也会在后台、日志、错误页或扫描中漏出来。
反向代理配置必须填对 目标URL 和 发送域名
这是最常出错的第一步。很多用户填了 https://origin.com 却忽略 发送域名 必须设为 origin.com(不含协议),否则源站收到的 Host 头为空或为宝塔服务器 IP,直接 404 或返回默认站点。
-
目标URL必须带协议(http://或https://),且不能带路径,例如https://api.example.org合法,https://api.example.org/v1会出错 -
发送域名填的是源站期望的Host请求头值,通常就是目标URL的域名部分,比如api.example.org - 如果源站是单 IP 多域名(如用 Nginx server_name 匹配),
发送域名错了就匹配不到配置,可能返回其他站点或 502
不改 /etc/hosts 很可能走 DNS 直连源站 IP
宝塔反代服务器发起上游请求时,默认走系统 DNS 解析。若源站域名 DNS 仍指向其真实 IP(比如还没切到 Cloudflare 或没关掉本地 DNS 缓存),那反代服务器就直接连过去了,等于白配。
- 必须手动编辑
/etc/hosts,加一行:源站真实IP 源站域名,例如203.0.113.45 api.example.org - 改完不用重启 Nginx,但建议执行
nginx -t验证配置,再bt reload或重载 Nginx - 验证方式:在宝塔服务器上执行
curl -H "Host: api.example.org" http://api.example.org,看是否返回源站内容;如果返回 404 或连接拒绝,说明 hosts 没生效或源站未监听该 Host
响应头 server 和 X-Powered-By 必须清理
即使流量全走反代,Nginx 默认会在响应头里写 server: nginx 或 server: openresty,加上宝塔常用版本标识,扫描器一扫就知道你用的是宝塔 + LNMP 栈,顺藤摸瓜找管理端口。
- 进网站 → 设置 → 配置文件,在
server块里加两行:server_tokens off;和proxy_hide_header X-Powered-By; - 如果源站自己也输出
server头,还需加proxy_hide_header server;(注意:这会同时隐藏源站和 Nginx 的 server 头) - 改完保存并重载配置,用
curl -I https://yourdomain.com检查响应头是否已无server和X-Powered-By
Cloudflare 共存时,宝塔的 HTTPS 强制跳转必须关
Cloudflare 是帮你加密到边缘节点,但如果你在宝塔里开了「强制 HTTPS」或写了 return 301 https://,用户访问 http:// 时就会被宝塔 301 到 https://,而这个跳转响应由宝塔服务器直接发出——响应头里的 Location 域名解析后可能暴露源站 IP,尤其当 DNS 还没切或缓存未刷新时。
- 网站 → 设置 → SSL → 取消勾选「强制 HTTPS」
- 网站 → 设置 → 配置文件 → 删除或注释掉所有
return 301 https://和rewrite ^(.*)$ https://$host$1 permanent;类规则 - 确保 Cloudflare DNS 页面该域名是橙色云图标(Proxied),不是灰色(DNS only)
真正难的不是配通反代,而是让所有路径——包括 404 页面、favicon 请求、健康检查接口、甚至 Nginx 错误日志里的 upstream 地址——都不意外暴露源站痕迹。每多一层代理,就要多验一次头、多查一次 DNS、多删一行危险 header。


















