如何用 Nginx 配置 VPS 反向代理隐藏源站 IP

文章导读
Nginx 反向代理配置本身无法直接隐藏 VPS 公网 IP,必须将域名 DNS 解析至 CDN 或前置代理节点,再由 Nginx 在源站接收转发流量才能实现隐藏。适用场景是 Web 服务安全加固,风险边界在于 HTTP 响应头或错误页面可能泄露真实 IP。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

Nginx 反向代理配置本身无法直接隐藏 VPS 公网 IP,必须将域名 DNS 解析至 CDN 或前置代理节点,再由 Nginx 在源站接收转发流量才能实现隐藏。适用场景是 Web 服务安全加固,风险边界在于 HTTP 响应头或错误页面可能泄露真实 IP。

先说结论:Nginx 负责流量转发逻辑,隐藏 IP 依赖 DNS 解析层级和前置节点。

  • 适合:需要保护后端服务器真实地址、抗 DDoS 攻击或统一入口管理的场景
  • 先准备:已可用的 CDN 服务或前置代理服务器、域名解析控制权、Nginx 环境
  • 验收:通过外部网络探测域名解析 IP 与源站 IP 不一致,且 HTTP 头无泄露

命令速用版

在源站 Nginx 配置文件中设置反向代理参数,确保接收来自前置节点的流量并正确传递客户端信息。

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

以上配置片段参考 Nginx 官方文档 ngx_http_proxy_module 模块标准写法。

为什么会这样

隐藏源站 IP 的核心在于 DNS 解析记录不直接指向 VPS 公网地址,而非 Nginx 软件功能。

客户端访问域名时,先查询 DNS 获取 IP 地址。如果 DNS 记录直接填写 VPS IP,客户端直接连接 VPS,Nginx 配置再完善也无法隐藏 IP。只有当 DNS 指向 CDN 或前置代理,流量经过中间层转发到源站 Nginx 时,公众看到的才是中间层 IP。

分步处理

按顺序完成 DNS 切换、Nginx 配置和访问控制,确保流量路径正确。

步骤 1:修改 DNS 解析
将域名 A 记录或 CNAME 记录修改为 CDN 服务商提供的地址,不要填写源站 VPS 的公网 IP。

步骤 2:配置源站 Nginx
在 VPS 上编辑 Nginx 配置文件,启用 proxy_pass 接收转发流量,并配置 proxy_set_header 传递真实客户端信息。

步骤 3:限制直接 IP 访问
在防火墙或 Nginx 中设置规则,仅允许 CDN 节点 IP 段访问 80/443 端口,拒绝其他直接 IP 请求。

怎么验证是否生效

通过外部网络工具检查域名解析结果和 HTTP 响应头,确认无源站 IP 泄露。

检查 DNS 解析:使用 dig example.com 或在线 DNS 查询工具,确认返回的 IP 是 CDN 节点 IP 而非 VPS 公网 IP。

检查 HTTP 头:使用 curl -I https://example.com 查看响应头,确保 Server 字段未暴露敏感信息,且无自定义头泄露内网 IP。

如何用 Nginx 配置 VPS 反向代理隐藏源站 IP

检查直连访问:在浏览器直接访问 VPS 公网 IP,确认无法打开网站或返回拒绝连接,证明防火墙策略生效。

常见坑

配置过程中容易因细节疏忽导致真实 IP 暴露,需重点检查以下环节。

HTTP 重定向泄露:确保 Nginx 不要在 301/302 跳转中将 Location 头指向真实 IP 地址。

邮件头泄露:如果 VPS 发送系统邮件,邮件头中的 Received 字段可能包含源站 IP,需配置 SMTP 中继。

SSL 证书匹配:前置代理与源站之间的 HTTPS 连接需确保证书有效,避免中间层因验证失败回源失败。

常见问题

只配置 Nginx 反向代理能隐藏 IP 吗

不能,必须配合 DNS 解析到中间层。

单纯在 VPS 上运行 Nginx 只是软件层面的转发,如果 DNS 直接解析到该 VPS IP,公众依然可以直接看到并访问该 IP。

如何防止通过 HTTP 头泄露真实 IP

清理响应头中的敏感字段并限制回源头信息。

在 Nginx 中使用 proxy_hide_header 隐藏后端服务器版本信息,并确保应用程序代码不将内网 IP 写入 Cookie 或自定义 Header。

防火墙策略会影响 CDN 回源吗

会,需将 CDN 节点 IP 段加入白名单。

如果防火墙拒绝了所有非本地流量,CDN 节点也无法连接源站,需查询 CDN 服务商提供的 IP 段并放行。

参考来源

Nginx 官方文档 - ngx_http_proxy_module
URL: https://nginx.org/en/docs/http/ngx_http_proxy_module.html