【nginx】nginx反向代理并配置SSL后,在Springboot中获取请求路径的问题

今天使用nginx对项目进行反向代理并设置了SSL访问。如下图
【nginx】nginx反向代理并配置SSL后,在Springboot中获取请求路径的问题
【nginx】nginx反向代理并配置SSL后,在Springboot中获取请求路径的问题

反向代理和SSL访问目前没有什么问题。

但我在SpringBoot中使用

httpRequest.getRequestURL().toString()

来获取用户请求地址。获取到的地址都是http开头的。

假设用户访问https://xxx.xxx.com,我在代码中只能获取http://xxx.xxx.com

请问有什么办法可以获取到https的吗?网上大部分教程是修改tomcat配置,但目前我使用的是内嵌tomcat,不知道该如何修改

回答

问题已经解决了。SpringBoot可以使用配置来修改Tomcat。

SpringBoot 1.5.x和2.x 版本的方法不一致,我这里是2.x的解决办法

@Configuration

public class TomcatConfig {

@Bean

public ServletWebServerFactory servletContainer() {

TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();

// 新建一个RemoteIpValve

RemoteIpValve remoteIpValve = new RemoteIpValve();

// 下面这里的值要与nginx的header头对应

remoteIpValve.setRemoteIpHeader("x-forwarded-for");

remoteIpValve.setProtocolHeader("x-forwarded-proto");

remoteIpValve.setProtocolHeaderHttpsValue("https");

// 为tomcat新增一个valve

tomcat.addEngineValves(remoteIpValve);

return tomcat;

}

}

你代理到 后端使用的是 http 协议

http_pass http://127.0.0.1:9000/

你可以添加个 header 头, 后端处理下,

            proxy_set_header X-Proto SSL;

proxy_set_header X-Forwarded-Proto https;`

或着, 你直接给 127.0.0.1:9000 绑定SSL

http_pass https://127.0.0.1:9000/

以上是 【nginx】nginx反向代理并配置SSL后,在Springboot中获取请求路径的问题 的全部内容, 来源链接: utcz.com/a/83691.html

回到顶部