在 VPS 上配置 Nginx 反向代理隐藏真实 IP,核心是将后端服务绑定至内网地址(如 127.0.0.1),仅开放 Nginx 的 80/443 端口,并通过防火墙禁止外部直接访问后端端口。
先说结论:Nginx 反向代理能有效隔离客户端与后端服务,但需配合防火墙策略和响应头清理才能防止 IP 泄露。
- 适合:VPS 托管 Web 服务、微服务网关、需要隔离后端拓扑的场景
- 先准备:安装 Nginx、确认后端服务监听地址、配置云安全组或 iptables
- 验收:curl 检查响应头无后端信息、直接访问后端端口被拒绝、日志记录真实客户端 IP
命令速用版
以下是基于 Linux VPS 的最小化配置片段,可直接嵌入 Nginx 配置文件:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
}
}在全局 http 块中添加 server_tokens off; 以关闭 Nginx 版本号暴露。
为什么会这样
Nginx 反向代理通过作为中间层接收请求并转发,使客户端仅与 Nginx 交互。
默认情况下,后端服务若监听公网 IP 或未清理响应头,仍可能泄露真实地址或技术栈。隐藏 IP 的本质是网络层隔离(防火墙)与应用层伪装(Header 清理)的结合,确保外部无法直连后端且无法通过响应信息推断源站。
分步处理
1. 绑定后端服务至内网
检查后端应用(如 Tomcat、Node.js)配置,确保监听地址为 127.0.0.1 或内网 IP,禁止监听 0.0.0.0。
2. 配置防火墙策略
使用 ufw 或 iptables 禁止外部访问后端端口。例如运行 ufw deny 8080 或在云安全组中仅放行 80/443 端口。
3. 配置 Nginx 反向代理
在 location 块中设置 proxy_pass 指向内网地址,避免使用公网域名或 IP。添加 proxy_set_header 透传客户端真实 IP 信息。
4. 清理敏感响应头
添加 proxy_hide_header Server; 和 proxy_hide_header X-Powered-By; 防止泄露后端技术栈。全局关闭 server_tokens。
5. 拦截非法 HTTPS 直连
针对 Nginx ≥1.19.4 版本,在默认 HTTPS server 块中加 ssl_reject_handshake on; 老版本可新增 server_name _; 的 server 块监听 443 并返回 444,防止通过 IP 直接访问 HTTPS 暴露证书域名。
怎么验证是否生效
1. 检查响应头
使用 curl -I http://your-domain.com 查看响应头,确认无后端 Server 信息,且 X-Forwarded-For 相关头存在。
2. 测试直连后端
尝试直接访问 http://your-domain.com:8080,应返回连接拒绝或 403/404,证明防火墙生效。
3. 核对日志
检查 Nginx 访问日志,remote_addr 应为用户真实 IP;后端日志中来源应为 127.0.0.1,但应用层读取的 X-Real-IP 字段正确。
常见坑
1. 后端监听公网
若后端服务监听 0.0.0.0 且防火墙未拦截,攻击者仍可扫描端口直连源站。
2. 响应头泄露
未配置 proxy_hide_header 可能导致后端框架版本暴露,增加被针对性攻击风险。
3. 客户端 IP 失真
未透传 X-Real-IP 会导致后端日志记录的是 Nginx 本机 IP,影响风控和统计。
4. 证书域名暴露
若未配置兜底 server 块拦截 IP 直连 HTTPS,扫描器可通过 IP 访问获取证书中的域名信息。
常见问题
配置反向代理后后端日志 IP 全是 127.0.0.1 怎么办?
需在 Nginx 配置中显式透传 X-Real-IP 和 X-Forwarded-For 头,并在后端应用中读取这些字段获取真实 IP。
使用 CDN 后还需要配置 Nginx 隐藏 IP 吗?
需要,CDN 回源仍会访问源站 IP,若源站未限制仅允许 CDN 节点访问,真实 IP 仍可能暴露。
如何防止用户通过 IP 直接访问网站?
在 Nginx 中配置默认 server 块,对非预期域名的请求返回 444 或 403,仅允许绑定域名的请求通过。
参考来源
- 如何通过 Nginx 反向代理防止后端真实 IP 暴露
- Nginx 利用代理模块隐藏真实服务器 IP 地址
- Nginx 反向代理隐藏 Web 真实 IP 的完整配置指南
- Nginx 实战教程:怎么利用反向代理隐藏内部微服务真实端口与拓扑
- 使用宝塔的反向代理功能隐藏服务器真实 ip 教程