反代后的真实客户端 IP、路径前缀与 Host
正确转发 X-Forwarded-For/Proto/Prefix 和 Host,只信任代理,避免重定向循环与错误绝对 URL。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 任务
反代必须告诉应用:
- 客户端是谁:
X-Forwarded-For(或 RFC 7239Forwarded); - 什么协议:
X-Forwarded-Proto; - 哪个主机:保留
Host; - 哪个路径前缀:应用挂在
/app时用X-Forwarded-Prefix。
应用只能信任来自代理的这些头。
location / { proxy_pass http://127.0.0.1:3000; 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_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host;}路径挂载:
location /app/ { proxy_pass http://127.0.0.1:3000/; proxy_set_header X-Forwarded-Prefix /app;}proxy_pass 末尾斜杠会去掉 /app/;前缀头告诉应用怎么生成链接。
IIS ARR
Section titled “IIS ARR”- 在农场/代理设置里保留
Host。 - 转发
X-Forwarded-For/X-Forwarded-Proto。 - 应用在路径下时,用 URL Rewrite 服务器变量设
X-Forwarded-Prefix。 - 除非应用按 localhost 配好,不要把
Host改写成localhost。
Express:
app.set('trust proxy', 1);ASP.NET Core:
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto});配置已知代理/网段;默认通常只信任 loopback。公网主机不要信任所有代理。
现象:浏览器在 http/https 之间跳,或跳到 localhost。
原因:
- TLS 终止后代理发的
X-Forwarded-Proto: http; - 应用忽略头并跳 HTTPS;
- 代理把
Host改成内部名; - 规范主机规则抓到健康检查。
修头/信任边界,不要全局关 HTTPS 跳转。
curl.exe -I -H "X-Forwarded-Proto: https" https://lab.example/curl.exe -H "Host: app.example" http://127.0.0.1:3000/whoami应用应报告公网 scheme/host、真实客户端 IP,重定向用公网名。
E1。实验室 IIS/Nginx 没有多跳代理;头配置是 Server 2025 上用真实上游验证的方案。