仅靠单一 proxy_pass 无法隐藏后端 ip,必须结合网络层隔离(绑定内网地址+防火墙封禁)、响应头清理(proxy_hide_header + server_tokens off)、ssl 拦截(ssl_reject_handshake 或 return 444)和日志验证四方面协同实施。

靠单一 proxy_pass 配置无法真正隐藏后端 IP,必须结合网络层隔离、响应头清理、SSL 拦截和日志验证四方面协同实施。
绑定后端服务到内网或本地地址
后端应用(如 Node.js、Tomcat、Flask)启动时,必须明确监听 127.0.0.1 或内网地址(如 192.168.1.10),严禁绑定 0.0.0.0 或公网网卡。例如:
- Node.js 启动命令加
--host 127.0.0.1 - Spring Boot 配置
server.address=127.0.0.1 - Python Flask 运行时指定
host='127.0.0.1'
防火墙彻底封禁后端端口
仅靠应用层绑定不够,必须在网络层阻断外部直连。根据环境选择对应方式:
- 云服务器:在安全组中删除所有对后端端口(如 8080、3000、8443)的入站规则
- 宝塔面板:进入「安全」→「防火墙」→ 添加规则:来源 IP 选“指定 IP”,端口填“8080”,策略设为“拒绝”
- Linux VPS:运行
ufw deny 8080或用 iptables 禁止非本机访问
配置 Nginx 代理并清理敏感信息
proxy_pass 必须指向内网地址,同时清除可能泄露技术栈的响应头:
-
proxy_pass http://127.0.0.1:8080;(不写域名或公网 IP) - 在 location 块中添加:
proxy_hide_header Server;和proxy_hide_header X-Powered-By; - 全局关闭版本号:
server_tokens off;(写在 http 块内) - 透传真实客户端 IP:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
拦截非法 HTTPS 直连请求
扫描器用 IP 直接访问 https://[你的IP]:443 会暴露证书中的域名。需配置兜底 server:
- Nginx ≥1.19.4:在默认 HTTPS server 块中加
ssl_reject_handshake on; - 老版本:新增一个
server_name _;的 server 块,监听 443,返回return 444; - 避免自签 IP 证书——既难维护,又可能因密钥弱引入新风险











