ServletUriComponentsBuilder遇到Nginx反向代理时,无法识别HTTPS
前言
- spring mvc 5.2.9.RELEASE
- springboot 2.3.4.RELEASE
ServletUriComponentsBuilder遇到Nginx反向代理时,无法识别HTTPS的原因
spring 5.0.X ServletUriComponentsBuilder 会读取 X-Forwarded-Prefix 头,但spring 5.1.X 就不再处理。
其在官方注释如下:
/*** UriComponentsBuilder with additional static factory methods to create links* based on the current HttpServletRequest.** <p><strong>Note:</strong> As of 5.1, methods in this class do not extract* {@code "Forwarded"} and {@code "X-Forwarded-*"} headers that specify the* client-originated address. Please, use* {@link org.springframework.web.filter.ForwardedHeaderFilter* ForwardedHeaderFilter}, or similar from the underlying server, to extract* and use such headers, or to discard them.** @author Rossen Stoyanchev* @since 3.1*/
public class ServletUriComponentsBuilder extends UriComponentsBuilder {
解决办法
springboot中添加ForwardedHeaderFilter
@Configuration
public class ConfigForwardedHeaderFilter {@Beanpublic Filter forwardedHeaderFilter() {return new ForwardedHeaderFilter();}
}
nginx中添加 X-Forwarded-*
location ^~ /front{proxy_pass http://127.0.0.1:8014;# $server_port端口,让request.getServerPort()能够获取正确的端口proxy_set_header Host $host:$server_port;proxy_set_header Remote_Addr $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# https请求转成http请求时,weblogic设置proxy_set_header WL-Proxy-SSL true; # https请求转成http请求时,tomcat设置proxy_set_header X-Forwarded-Proto $scheme;# index页面设置index index;}
X-Forwarded-For
: HTTP 请求端真实 IPX-Forwarded-Host
: 用户在浏览器中看到的Host。域名或者ip。X-Forwarded-Port
: 用户在浏览器中看到的Port。80和443为默认端口,浏览器不显示这两个端口。X-Forwarded-Proto
: 用户在浏览器中看到的协议。Http或HttpsX-Forwarded-Prefix
: 当nginx转发请求后,省略的url部分。比如将prefix/a/b/c
, 转发到/a/b/c
,prefix
就是X-Forwarded-Prefix
。
参考
https://github.com/spring-projects/spring-hateoas/issues/862
https://github.com/spring-projects/spring-boot/issues/16492
ServletUriComponentsBuilder遇到Nginx反向代理时,无法识别HTTPS相关推荐
- nginx 反向代理时丢失端口的解决方案(转)
nginx 反向代理时丢失端口的解决方案(转) 参考文章: (1)nginx 反向代理时丢失端口的解决方案(转) (2)https://www.cnblogs.com/shenyixin/p/1136 ...
- 解决 nginx 反向代理时 session 丢失 无效的问题
解决 nginx 反向代理时 session 丢失 无效的问题 原文 blog.csdn.net/joyous/article/details/79966593 因为原始路径和代理路径发生了变化,导致 ...
- 配置nginx反向代理jira并实现https
摘要: 配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA ...
- 配置nginx反向代理时,要注意的权限设置
MYPM演示环境(www.mypm.cc/mypm)中当下载大的附件,或是页面中有大图片时,就会下载中断或是图版无法显示 也许你要说我用的nginx缺省的设置没碰到这问题,那是因为你的网站没大文件 查 ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- 解决 nginx 反向代理时的 upstream timeout 问题
有时候我们用 nginx 做反向代理的时候会遇到如下报错: "[error] 11618#0: *324911 upstream timed out (110: Connection tim ...
- cloudreve使用nginx反向代理时上传卡死或速度慢的解决办法
打开宝塔控制面板,选择"网站" 选中网站名并点击 选择左侧"反向代理" 点击"配置文件".注意:此反向代理的"目标url" ...
- nginx 反向代理web应用将https请求转成http请求时,必须注意事项
通过nginx可以实现将https请求转成http请求.具体方法这里暂且不表. 但有一项配置必须要添加(查看大多数配置均为对此进行提及): proxy_set_header WL-Proxy-SSL ...
- nginx反向代理时配置访问密码
在有些情况下,我们需要对服务器上的某些资源进行限流或者禁止陌生人访问,我们可以通过nginx配置来对url添加访问密码. nginx 开启访问验证 在 nginx 下,提供了 ngx_http_aut ...
最新文章
- 打造属于自己的图文符号库
- Tasker文件夹说明
- 前端学习(3294):effect hook
- 一条SQL语句查询当前数据库下有多少张表
- mysql历史数据备份_Mysql存储过程历史表备份
- qq互联开放平台 开源SDK共享 常见问题
- C++/C--Windows下获取键盘事件
- MySQL中GTID的几个限制和解决方案(r13笔记第21天)
- WEB前端超多知识总结
- 红米note7android10,红米Note7 Pro 安卓10.0原生刷机包(最新固件升级包lineage17.1)
- HTML4到HTML5的新增内容,你知道吗?
- 内存继续涨价 LPDDR4/LPDDR4X内存标准升级
- HG6543C1(1) --- 电信宽带天翼网关
- 遥感图像处理之计算植被覆盖度公式
- 考生必看:高中数学三角函数公式大全(史上最全)
- 软件测试薪资高不高?软件测试工资水平调研公布
- 科普知识------世界洋流[地球上有哪些洋流]
- 研究生的生活原来是酱紫的……
- 打乱魔方软件_怎样打乱魔方
- 基于Java的冒泡排序法