HTTPS代理转发到HTTP后端服务SpringBoot导致协议获取有误

HTTPS代理转发到HTTP后端服务SpringBoot导致协议获取有误 #

问题描述 #

  1. https流量进入nginx
  2. nginx配置了反向代理到springboot站点,协议是http
  3. springboot代码中 request.getScheme() 得到的是 http,而不是 https

部分nginx反向代理配置:

plaintext
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

解决方式 #

(1)修改nginx反向代理配置,如下:

plaintext
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_add_x_forwarded_proto;
proxy_set_header X-Forwarded-Port $proxy_add_x_forwarded_port;

让tomcat容器自行处理 X-Forwarded- 头部,需要将以下配置添加到 application.yml 中:

yml
# 方式一:
server:
  forward-headers-strategy: native

# 方式二:
server:
  tomcat:
    protocol-header: 'X-Forwarded-Proto'
    #remote-ip-header: 'X-Forwarded-For'
    #port-header: 'X-Forwarded-Port'

备注:

  • 项目: yueyin
  • springboot 版本: 2.2.1.RELEASE
2023年2月23日