我遇到的问题:
前端用vue的路由做页面路由,后台用spring mvc做数据接口,但是遇到路由地址和接口地址无法区分的问题,导致nginx无法正确准发比如:
1)http://127.0.0.1/iroma/person 页面路由导航
2)http://127.0.0.1/login/login 后端接口url (虽然可以采用.do 或者.action类似的方法,以后缀为过滤条件,但是觉得太low,而且后缀是多余的,看着也不美观)
以上两个接口无法通过 nginx的匹配规则来区分。
解决的办法:
1)修改前端的接口,为所有的接口前面都加上api,比如 http://127.0.0.1/login/login 改后为:http://127.0.0.1/api/login/login(虽然和加.do有异曲同工之处,但是个人觉得这样更好,虽然我不是处女座的:) )
2 ) 修改nginx匹配规则,并且去掉前端请求url中的 /api ,因/api这对后端来说,没有什么意义,需要在后端所有接口都加上/api 难免让人有点不爽。
location / {
root html/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ~^/api/[^\/]+/[^\/]+ {
rewrite ^(/api)(.*)$ $2 break;
proxy_pass http://myServer;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
修改匹配规则是遇到两个问题
1. 匹配不到api
/api/test 可以转发到服务器,但是/api/test/test就无法转发到服务器,后来参考https://blog.coding.net/blog/tips-in-configuring-Nginx-location这篇文章解决掉了,
2. 对rewrite 不熟悉,虽然也是正则,但是看得还是一脸蒙蔽。好在参考https://www.cnblogs.com/pycode/p/6588896.html这边文章解决了
总结:
虽然勉强会配置nginx,但是还有很多细节的东西不知道,实践太少是主要原因。实践是检验知识的强力武器。