You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:39:03