最根本有效的隐藏源站IP方法是仅暴露Nginx,后端服务绑定127.0.0.1或内网地址、防火墙封禁后端端口、配置兜底server拦截非法HTTPS请求、清理响应头并透传真实客户端IP。

只让 Nginx 对外暴露,其他服务全部收进内网,这是隐藏源站 IP 最根本也最有效的做法。关键不是“藏得有多深”,而是“别让别人有路可走”——Nginx 必须是唯一能被公网访问的入口,后端服务连端口都不能对外亮出来。
绑定后端服务到内网地址或本地回环
Tomcat、Node.js、PHP-FPM 或任何后端应用,启动时必须监听 127.0.0.1 或内网段(如 192.168.1.10),绝不能绑定 0.0.0.0 或公网网卡 IP。否则即使 Nginx 配了 proxy_pass,攻击者仍可能绕过它直连后端端口(比如 8080、3000)。
- Java 应用:启动参数加
--server.address=127.0.0.1 - Node.js:
app.listen(3000, '127.0.0.1') - 宝塔面板:在站点设置 → 反向代理中,目标地址填
http://127.0.0.1:8080,不要填域名或公网 IP
防火墙彻底封死后端端口
仅靠应用层绑定不够,必须叠加网络层防护。云服务器要配置安全组,物理机或 VPS 要用 iptables 或 ufw:
- 禁止所有外部对后端端口(如 8080、8443、3000)的入站连接
- 只放行 Nginx 所在本机(127.0.0.1)或内网管理 IP 的访问(如有运维需求)
- 宝塔用户可在「安全」页面直接添加规则:来源 IP 选“指定 IP”,端口填“8080”,策略选“拒绝”
堵住 HTTPS 下的证书泄露漏洞
这是最容易被忽略的一环:当扫描器直接用 IP 访问 https://[你的IP]:443,Nginx 会返回第一个 SSL 配置站点的证书,而证书里写的域名会把源站彻底暴露。
解决方法是在 Nginx 中加一个“兜底 server”,专门拦截这类非法请求:
- Nginx 1.19.4+:用
ssl_reject_handshake on直接拒掉无 SNI 的握手 - 老版本 Nginx:配一个
server_name _的默认块,监听 443,返回return 444(关闭连接) - 不建议自签 IP 证书——既增加维护成本,又可能因密钥强度不足引入新风险
清理响应头 + 透传真实客户端 IP
后端服务本身也可能在响应头中泄露信息,比如 Server: Apache/2.4.6 或 X-Powered-By: PHP/8.1。这些虽不直接暴露 IP,但会暴露技术栈,给攻击者提供突破口。
- 在 Nginx 的 location 块中加:
proxy_hide_header Server;和proxy_hide_header X-Powered-By; - 全局关闭 Nginx 版本号:
server_tokens off; - 务必透传真实 IP:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - 后端日志和业务逻辑必须读取
X-Real-IP,而不是直接用 REMOTE_ADDR


















