透传Host和Scheme是Nginx反向代理关键配置:Host头用proxy_set_header Host $host;传递原始域名,Scheme用proxy_set_header X-Forwarded-Proto $scheme;告知后端真实协议,二者缺一不可。

透传 Host 和 Scheme 是 Nginx 反向代理中最基础也最关键的 header 配置,直接决定后端能否正确识别访问域名、协议类型和生成合法跳转链接。标准配置不是“越多越好”,而是要精准覆盖真实场景需求。
Host 头必须透传原始值
后端服务(如 Django、Spring Boot、Next.js)常依赖 Host 头做路由分发、构建绝对 URL 或校验白名单。若不透传,可能返回 400、404 或跳转到错误域名。
-
推荐写法:
proxy_set_header Host $host;—— 传递客户端请求中的 Host(不含端口),适用于绝大多数单域名或子域名场景 -
更严谨写法:
proxy_set_header Host $http_host;—— 保留原始 Host 值(含端口与大小写),适合需要端口信息或泛解析的部署 -
禁用写法:避免硬编码如
proxy_set_header Host example.com;,会导致所有子路径/子域名丢失原始 Host,破坏多租户或灰度逻辑
Scheme 必须透传原始协议
当 Nginx 终止 HTTPS(即 SSL Termination)时,后端收到的其实是 HTTP 请求,但业务仍需知道用户是通过 HTTPS 访问的。否则会触发重定向循环、混合内容警告、Secure Cookie 失效等问题。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
核心指令:
proxy_set_header X-Forwarded-Proto $scheme;——$scheme自动取值为http或https,取决于客户端直连 Nginx 的协议 -
配套建议:
proxy_set_header X-Forwarded-Host $host;—— 当 Nginx 做了域名重写(如将api.example.com转发到内部服务),该头可帮助后端还原原始访问地址 -
安全前提:仅在 Nginx 是可信入口(无公网直连后端)时信任这些头;若前有 CDN,应确认其是否已设置
X-Forwarded-Proto,Nginx 此处宜透传而非覆盖
常见组合配置示例
以下是最小可行且生产环境验证过的 location 级配置:
(注意:放在location 块内,不要写在 http 或 server 顶层,避免被意外继承或覆盖)
proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host $host;
若同时需支持 WebSocket 或多层代理,再叠加 Upgrade、Connection 和 X-Forwarded-For 即可,但 Host 与 Scheme 这两项是协议层面的刚需,不可省略。

















