前言:
当前兄弟们对“nginx动静态代理”可能比较注意,咱们都想要学习一些“nginx动静态代理”的相关知识。那么小编也在网摘上收集了一些对于“nginx动静态代理””的相关文章,希望各位老铁们能喜欢,咱们快快来了解一下吧!问题描述
一个前后端分离的运营管理平台,前端基于Vue3.0开发,后端基于SpringBoot+OAuth2.0实现,在开发环境一切正常,部署上线后,用Nginx发布静态前端,并反向代理后端服务,发现能够正常获取到token信息,确无法获取用户信息,登录失败,卡死.....
经排查发现前端项目先获取access_token,一切正常,但通过access_token获取用户信息时就无法获取到了。
问题原因
当我们用nginx 作为反向代理服务器,导致了 Spring 认证代码中,无法正确获取服务正确的IP和端口地址,也就是说调用地址和认证地址不一致了,跳转的是request的FullRequestUrl,最后导致了 redirectUri 无法正确匹配从而认证失败。比如用Nginx代理后地址是192.168.1.5/serveradmin,而服务原地址是192.168.1.8:8019/admin,这样的话IP地址、端口、scheme都不一致,redirectUri的是192.168.1.5/serveradmin,请求不到真正的服务,因此无法认证。
解决思路
将nginx 和 tomcat 进行设置,将host、scheme等信息设置一致,可以用swaggerUI开放出认证测试,用代理出来的地址和原地址都能在swaggerUI中访问就可以了。
1、springboot项目配置
remote-ip-header: "X-Forwarded-For"
protocol-header: "X-Forwarded-Proto"
protocol-header-https-value: "https" //这个可以是http,如果是https的话在nginx对应ssl只能用https访问,http可以对应80用http访问
2、nginx配置
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
标签: #nginx动静态代理