我遇到的問題:
前端用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,但是還有很多細節的東西不知道,實踐太少是主要原因。實踐是檢驗知識的強力武器。