Spring Security配置Nginx反向代理后跳转HTTP而非HTTPS问题求助
问题解决方案
步骤1:补充Spring Boot核心配置
在application.yml中添加如下配置,开启转发头处理策略:
server: forward-headers-strategy: NATIVE # 若存在多级反向代理,可额外配置 trusted-proxies 信任代理IP段 # tomcat: # remoteip: # trusted-proxies: "172.17.0.0/16,192.168.1.0/24"
Spring Boot 2.2+版本forward-headers-strategy默认值为NEVER,不会处理任何转发头,配置为NATIVE后才会启用你自定义的RemoteIpValve逻辑,识别代理传递的协议、IP信息。
步骤2:修正RemoteIpValve配置(按需配置)
如果你的Nginx部署IP不在Tomcat默认信任的内网IP段内,需要在ServletWebServerFactory的Bean定义中补充信任代理IP配置:
// 示例为信任172.17.*.*和192.168.1.*网段的代理,多个IP段用|分隔,注意正则转义 remoteIpValve.setInternalProxies("172\\.17\\.\\d{1,3}\\.\\d{1,3}|192\\.168\\.1\\.\\d{1,3}");
只有匹配到的代理IP传递的X-Forwarded-*头才会被Tomcat认可,未配置的话非默认内网段的代理头会被直接忽略。
步骤3:检查Nginx配置,确保转发头正确传递
确认Nginx反向代理的location配置中包含以下头传递规则:
location / { proxy_pass http://你的后端服务地址; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; }
Host头保证Spring生成的baseUrl域名和用户访问的域名一致X-Forwarded-Proto头传递用户真实请求的协议(HTTPS)X-Forwarded-Port头传递用户真实访问的端口,非443端口访问时必须配置
步骤4:恢复Spring Security配置
完成上述配置后,取消WebSecurityConfigurator中requiresSecure的注释即可,不会再出现无限重定向问题:
.and().requiresChannel().anyRequest().requiresSecure()
此时Spring Security会通过request.isSecure()正确识别请求为HTTPS协议,不会触发循环重定向,OAuth2的redirect_uri也会自动生成HTTPS前缀,无需硬编码baseUrl。
内容的提问来源于stack exchange,提问作者user3474541
相关产品推荐
相关产品推荐

