Nginx转发https请求访问http后端接口
Nginx转发https请求问题描述前后端分离项目,前端使用Nginx部署,后端是Spring Boot项目,使用tomcat部署。Nginx配置了SSL,并且前端项目需要https协议访问。后端接口任然使用http访问。前后端项目部署在同一个服务器中。当在前端中直接用http协议访问后端的接口可能出现的问题如下:问题原因,因为前端是使用了https,所以经过前端访问后端接口是也要用https协议
Nginx转发https请求
问题描述
- 前后端分离项目,前端使用Nginx部署,后端是Spring Boot项目,使用tomcat部署。
- Nginx配置了SSL,并且前端项目需要
https协议
访问。后端接口任然使用http
访问。 - 前后端项目部署在同一个服务器中。
当在前端中直接用http协议访问后端的接口可能出现的问题如下:
问题原因,因为前端是使用了https,所以经过前端访问后端接口是也要用https协议进行访问。但是Spring Boot项目在没有做多额外的SSL配置或者请求转发的情况下不能直接通过https协议访问的。
解决思路
将前端的请求经过Nginx的转发成http请求之后在发送给后端接口
修改Nginx的配置后如下
关于Nginx配置https协议的博文参考。在这个的基础上添加如下配置
location /api/ {
proxy_pass http://www.baidu.com:8084/; # 注意最后有个/,会去掉/api前缀
}
以www.baidu.com为例,这样配置Nginx会转发所有以/api开头的URI。通常都会在接口访问路径前面加上/api,然后到nginx配置去掉这个前缀。
我们在前端中访问后端的接口的路径为
https://www.baidu.com:8084/api/get/user/1
则经过该请求会被Nginx所转发,访问的后端接口路径为
http://www.baidu.com:8084/get/user/1
刚开始去网上查得一头雾水,有说让Spring Boot配置SSL支持Https的请求的,有说可以使用两份SSL证书实现的,都比较复杂,有些试了并不行,可能是遇到的问题的场景不一样。之后理清问题之后再去请问师兄,得到了这个相对简单的解决方案。遇到问题之前还是得想明确自己的问题是什么,和网上所描述的问题背景是否一致,毕竟大家遇到问题的场景可能有些区别。
更多推荐
所有评论(0)