如何配置Nginx避免反向代理应用因Scheme识别错误引发的重定向死循环问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计865个文字,预计阅读时间需要4分钟。
典型表现是:
根本原因不是 Nginx 自己跳转,而是后端依赖 X-Forwarded-Proto 判断协议,而该头默认不自动传递。
-
proxy_set_header X-Forwarded-Proto $scheme;必须显式配置,且放在location块内、proxy_pass之前 - 若 Nginx 本身监听多个端口(如 80 + 443),
$scheme会动态取值(http或https),无需硬编码 - Spring Boot 用户需额外启用
server.forward-headers-strategy=framework,否则忽略该头 - Django 用户需设置
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
proxy_redirect 没生效?检查匹配顺序和协议一致性
proxy_redirect 不是“全局替换”,它按规则逐条匹配响应头中的 Location 值。常见失效场景是:后端返回了 https://localhost:3000/,但你只写了 proxy_redirect http://localhost:3000/ https://example.com/; —— 协议不匹配,规则跳过。
本文共计865个文字,预计阅读时间需要4分钟。
典型表现是:
根本原因不是 Nginx 自己跳转,而是后端依赖 X-Forwarded-Proto 判断协议,而该头默认不自动传递。
-
proxy_set_header X-Forwarded-Proto $scheme;必须显式配置,且放在location块内、proxy_pass之前 - 若 Nginx 本身监听多个端口(如 80 + 443),
$scheme会动态取值(http或https),无需硬编码 - Spring Boot 用户需额外启用
server.forward-headers-strategy=framework,否则忽略该头 - Django 用户需设置
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
proxy_redirect 没生效?检查匹配顺序和协议一致性
proxy_redirect 不是“全局替换”,它按规则逐条匹配响应头中的 Location 值。常见失效场景是:后端返回了 https://localhost:3000/,但你只写了 proxy_redirect http://localhost:3000/ https://example.com/; —— 协议不匹配,规则跳过。

