最近在写的一个项目,采用先后端分离的方式进行开发,登陆认证使用的是SpringSecurity框架。前端
在项目部署的时候出现了一个问题,在本身电脑上运行的时候一切顺畅,但是部署到服务器上就一直登陆失败,分别测试了前端和后端的代码,独立运行没有问题,打开F12查看返回的提示是发生了重定向。nginx
起初觉得是Security的配置问题,但是试来试去都没有什么做用,依然登陆不上。折腾半天无果后,来才考虑到nginx,只有它不同。security是根据url进行拦截的,是否是在反向代理的时候出了些猫腻呢?后端
在网上查了一圈,果真问题发生在Nginx上,修改一下Nginx的配置。服务器
原来的配置 proxy_pass http://127.0.0.1:8080 改后的配置 proxy_pass http://127.0.0.1:8080/
加了一个斜杠,问题就解决了。app
为啥少了个斜杠就不行了呢?原来问题是Nginx代理的路径和项目的context-path不匹配致使的。在每一个module的application.yml文件均可以配置server.servlet.context-path这个属性。若是进行不配置的话,它的默认值是''/'',这也就是为何我在Nginx里加了一个斜杠问题就解决了。context-path的做用与 @RequestMapping 相似,我理解@RequestMapping用于区分不一样的Controller,而context-path的主要做用是为了区分不一样的模块,这一点在使用反向代理的时候尤为重要,反向代理服务器须要经过区分context-path去辨别到底要代理哪一个服务,若是找不到,它就要报错。 框架