【nginx】nginx反向代理并配置SSL后,在Springboot中获取请求路径的问题
今天使用nginx对项目进行反向代理并设置了SSL访问。如下图
反向代理和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的解决办法
@Configurationpublic 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