关键是主动控制host头而非透传,须用proxy_set_header host显式设为可信值(如$proxy_host或固定域名),禁用$host/$http_host,并配合default_server拦截非法请求。

关键不是“加头”,而是“控头”——用 proxy_set_header 主动设定可信值,切断攻击路径,让后端只接收你认可的信息。
重写 Host 头,防 Host 头攻击
客户端可任意伪造 Host: evil.com,若后端未校验,可能触发缓存污染、日志注入或租户混淆。Nginx 默认不校验,只转发,所以必须显式覆盖:
-
推荐写法(最安全):
proxy_set_header Host $proxy_host;—— 值来自proxy_pass地址,天然可信,比如http://api.internal:8000 -
单域名场景:
proxy_set_header Host api.example.com;—— 固定值,彻底排除干扰 -
禁用透传:绝不能写
proxy_set_header Host $host;或$http_host,这等于把攻击入口直接交给后端
规范 Origin 和协议头,解决跨域 403
浏览器发送的 Origin: https://front.example.com 经代理后仍原样传给后端,若后端只认 https://api.example.com,就会拒收并返回 403。这不是 CORS 配置问题,而是请求头不匹配:
-
强制改写 Origin:
proxy_set_header Origin "https://api.example.com";—— 值必须与后端白名单一致,用双引号或单引号包裹 -
同步协议标识:
proxy_set_header X-Forwarded-Proto $scheme;—— 让后端知道真实是 HTTP 还是 HTTPS -
避免误判 Referer/Origin:
proxy_set_header Referer "";和proxy_set_header Origin "";—— 若后端无需这些头,清空比透传更安全
传递真实客户端信息,支撑风控与审计
不配置时,后端看到的全是 Nginx 本机 IP;多级代理下,X-Forwarded-For 还可能被伪造。需用内置变量构建可信链:
-
真实 IP(单层代理):
proxy_set_header X-Real-IP $remote_addr;—— 直接取最外层客户端 IP -
IP 链路(多层代理):
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 自动追加,不覆盖已有值 -
禁用下划线解析:
underscores_in_headers off;—— 防止X_User_ID被误当作X-User-ID,规避头部绕过
剥离无用或高危头,减少攻击面
某些头对后端毫无价值,却可能泄露设备指纹、跳转来源或干扰逻辑,主动清除比默认透传更稳妥:
-
移除 User-Agent:
proxy_set_header User-Agent "";—— 避免后端基于 UA 做不必要判断或记录 -
清空 Origin/Referer:
proxy_set_header Origin "";、proxy_set_header Referer "";—— 尤其在内部 API 场景,后端应由 Nginx 控制 CORS 响应,而非依赖原始头 -
禁用原始 Cookie(如需):
proxy_set_header Cookie "";—— 仅限特定鉴权场景,需确认后端兼容性
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











