前言

  • 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 请求端真实 IP
  • X-Forwarded-Host : 用户在浏览器中看到的Host。域名或者ip。
  • X-Forwarded-Port : 用户在浏览器中看到的Port。80和443为默认端口,浏览器不显示这两个端口。
  • X-Forwarded-Proto : 用户在浏览器中看到的协议。Http或Https
  • X-Forwarded-Prefix : 当nginx转发请求后,省略的url部分。比如将prefix/a/b/c, 转发到 /a/b/cprefix 就是 X-Forwarded-Prefix

参考

https://github.com/spring-projects/spring-hateoas/issues/862
https://github.com/spring-projects/spring-boot/issues/16492

ServletUriComponentsBuilder遇到Nginx反向代理时,无法识别HTTPS相关推荐

  1. nginx 反向代理时丢失端口的解决方案(转)

    nginx 反向代理时丢失端口的解决方案(转) 参考文章: (1)nginx 反向代理时丢失端口的解决方案(转) (2)https://www.cnblogs.com/shenyixin/p/1136 ...

  2. 解决 nginx 反向代理时 session 丢失 无效的问题

    解决 nginx 反向代理时 session 丢失 无效的问题 原文 blog.csdn.net/joyous/article/details/79966593 因为原始路径和代理路径发生了变化,导致 ...

  3. 配置nginx反向代理jira并实现https

    摘要: 配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA ...

  4. 配置nginx反向代理时,要注意的权限设置

    MYPM演示环境(www.mypm.cc/mypm)中当下载大的附件,或是页面中有大图片时,就会下载中断或是图版无法显示 也许你要说我用的nginx缺省的设置没碰到这问题,那是因为你的网站没大文件 查 ...

  5. Nginx 反向代理时获取用户的真实 IP

    在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...

  6. 解决 nginx 反向代理时的 upstream timeout 问题

    有时候我们用 nginx 做反向代理的时候会遇到如下报错: "[error] 11618#0: *324911 upstream timed out (110: Connection tim ...

  7. cloudreve使用nginx反向代理时上传卡死或速度慢的解决办法

    打开宝塔控制面板,选择"网站" 选中网站名并点击 选择左侧"反向代理" 点击"配置文件".注意:此反向代理的"目标url" ...

  8. nginx 反向代理web应用将https请求转成http请求时,必须注意事项

    通过nginx可以实现将https请求转成http请求.具体方法这里暂且不表. 但有一项配置必须要添加(查看大多数配置均为对此进行提及): proxy_set_header WL-Proxy-SSL ...

  9. nginx反向代理时配置访问密码

    在有些情况下,我们需要对服务器上的某些资源进行限流或者禁止陌生人访问,我们可以通过nginx配置来对url添加访问密码. nginx 开启访问验证 在 nginx 下,提供了 ngx_http_aut ...

最新文章

  1. 打造属于自己的图文符号库
  2. Tasker文件夹说明
  3. 前端学习(3294):effect hook
  4. 一条SQL语句查询当前数据库下有多少张表
  5. mysql历史数据备份_Mysql存储过程历史表备份
  6. qq互联开放平台 开源SDK共享 常见问题
  7. C++/C--Windows下获取键盘事件
  8. MySQL中GTID的几个限制和解决方案(r13笔记第21天)
  9. WEB前端超多知识总结
  10. 红米note7android10,红米Note7 Pro 安卓10.0原生刷机包(最新固件升级包lineage17.1)
  11. HTML4到HTML5的新增内容,你知道吗?
  12. 内存继续涨价 LPDDR4/LPDDR4X内存标准升级
  13. HG6543C1(1) --- 电信宽带天翼网关
  14. 遥感图像处理之计算植被覆盖度公式
  15. 考生必看:高中数学三角函数公式大全(史上最全)
  16. 软件测试薪资高不高?软件测试工资水平调研公布
  17. 科普知识------世界洋流[地球上有哪些洋流]
  18. 研究生的生活原来是酱紫的……
  19. 打乱魔方软件_怎样打乱魔方
  20. 基于Java的冒泡排序法

热门文章

  1. 当精准广告遇到大数据
  2. iOS之路9-#import 与#include和 @class的区别
  3. 如何定义和实现一个类的成员函数为回调函数
  4. java静态内部类了解一下
  5. tensorflow 模型的保存和加载
  6. 构建高并发高可用安全的IT系统-高并发部分
  7. dea工具debug断点红色变成灰色
  8. Visiual Studio2012 CLR20r3问题
  9. PL/SQL块结构和组成元素
  10. Django2.x中url路由的path()与re_path()参数解释(亲测)