核心是隐藏后端信息,需配置proxy_pass指向内网地址、proxy_set_header传递真实请求头、proxy_hide_header清除敏感响应头、server_tokens off关闭nginx版本暴露。

核心是让外部只看到 Nginx 的 IP 和端口,不暴露后端服务地址、端口、域名、响应头信息及版本标识。配置需覆盖转发规则、请求头传递、敏感头隐藏和版本伪装四个关键环节。
明确 proxy_pass 指向内网地址
确保 proxy_pass 使用的是内网 IP 或私有 DNS(如 10.0.0.5:8080 或 backend.internal:3000),绝不能是公网可解析的域名或外网 IP。Nginx 本身必须部署在与后端同局域网或 VPC 内,避免回源走公网。
- 正确示例:
proxy_pass http://192.168.2.10:8080;或proxy_pass http://backend-svc.default.svc.cluster.local:80; - 错误示例:
proxy_pass https://api.yourcompany.com;(暴露后端域名)或proxy_pass http://203.0.113.45:8080;(暴露公网IP)
设置标准转发头,但不泄露路径与中间链
用 proxy_set_header 传递必要上下文,同时避免拼接出可推断后端结构的信息。重点控制 Host、X-Forwarded-* 等字段。
-
proxy_set_header Host $host;—— 传原始请求 Host,不是后端地址 -
proxy_set_header X-Real-IP $remote_addr;—— 记录真实客户端 IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 追加而非覆盖,防伪造 -
proxy_set_header X-Forwarded-Proto $scheme;—— 告知后端当前是 http 还是 https - 不要写
proxy_set_header Host backend.example.com;或硬编码后端 Host
主动隐藏后端特征响应头
后端服务常自带 Server、X-Powered-By、X-AspNet-Version 等标识头,必须在 Nginx 层清除。
proxy_hide_header Server;proxy_hide_header X-Powered-By;proxy_hide_header X-AspNet-Version;- 若需统一标识,可用
add_header Server "Web Gateway";(注意:这会覆盖所有响应中的 Server 头)
关闭 Nginx 自身版本暴露
默认响应头含 Server: nginx/1.24.0,攻击者可据此检索已知漏洞。需全局禁用。
- 在
http{...}块顶层添加:server_tokens off; - 该配置作用于所有 server,无需在每个 location 重复写
- 配合
proxy_hide_header Server;可彻底抹除 Server 头
不复杂但容易忽略











