HTTPS代理转发到HTTP后端服务SpringBoot导致协议获取有误 #
问题描述 #
- https流量进入nginx
- nginx配置了反向代理到springboot站点,协议是http
- 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