龙空技术网

OAuth2.0认证Nginx反向代理解决方案

java技术站 600

前言:

当前兄弟们对“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,请求不到真正的服务,因此无法认证。

解决思路

将nginxtomcat 进行设置,将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动静态代理

上一篇关于Nginx的几个代表性面试问题

下一篇没有了