nginx 前后分離,地址重寫,url匹配中遇到的問題


我遇到的問題:

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM