关于配置Nginx反向代理后SpringSecurity认证失败的问题解决
最近在写的一个项目,采用前后端分离的方式进行开发,登录认证使用的是SpringSecurity框架。
问题描述
在项目部署的时候出现了一个问题,在自己电脑上运行的时候一切顺畅,可是部署到服务器上就一直登录失败,分别测试了前端和后端的代码,独立运行没有问题,打开F12查看返回的提示是发生了重定向。
问题解决
起初以为是Security的配置问题,可是试来试去都没有什么作用,依然登录不上。折腾半天无果后,来才考虑到nginx,只有它不一样。security是根据url进行拦截的,是不是在反向代理的时候出了些猫腻呢?
在网上查了一圈,果然问题发生在Nginx上,修改一下Nginx的配置。
原来的配置 proxy_pass http://127.0.0.1:8080 改后的配置 proxy_pass http://127.0.0.1:8080/
加了一个斜杠,问题就解决了。
问题总结
为啥少了个斜杠就不行了呢?原来问题是Nginx代理的路径和项目的context-path不匹配导致的。在每个module的application.yml文件都可以配置server.servlet.context-path这个属性。如果进行不配置的话,它的默认值是”/”,这也就是为什么我在Nginx里加了一个斜杠问题就解决了。context-path的作用与 @RequestMapping 类似,我理解@RequestMapping用于区分不同的Controller,而context-path的主要作用是为了区分不同的模块,这一点在使用反向代理的时候尤其重要,反向代理服务器需要通过区分context-path去辨别到底要代理哪个服务,如果找不到,它就要报错。
========================================================================================
不要简单的收集学习资料,知识活在百度云或者书签列表中意义不大。
把自己困惑的地方,真正搞懂,写出来。如果别人也能看懂,那才是真的掌握了,坚持下去,应该会有收获。
========================================================================================