angular6+springboot 先後分離 nginx 配置

工做場景:苦逼碼農一個,公司技術上但願跟上潮流,但人員不但願跟上,因此先後一塊兒開發,對於只開發前端代碼的人來講能夠 mock 數據,可是本人既然連後臺代碼一塊兒開發,但願經過 nginx代理直接訪問接口返回數據,so...前端

先上nginx配置nginx

server {
         listen 8085;
         server_name localhost;

         location / {
             proxy_pass http://localhost:4200;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
         }

         location ~ /server/.+ {
             rewrite /server/(.+) /$1 break;
             proxy_pass http://localhost:8082;
             proxy_cookie_path ~*^/.+/([^/]*) /$1;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-Real-IP $remote_addr;
         }

    }

自動略過server 的前兩行web

  1. 第一個 location 代理的是前端開發服務,服務啓動在4200端口; 這個location 的後3行配置是爲了讓nginx 能夠代理websocket ,生產中若是工程中沒有websocket 能夠不用; 開發中websocket 主要是爲了方便快速的在代碼從新發布以後能夠自動刷新頁面
  2. 第二個location 代理的是後臺服務器,~ /server/.+ 表明這個location 會處理全部符合這個正則的請求,不會與 第一個location的/衝突,由於 ~ 比 默認的匹配模式高
  3. 第二個location中第一行 rewrite 是重寫請求url,好比 請求的是 /server/service-name/user/currentUser,實際想要請求的是/service-name/user/currentUser,因此須要nginx重寫這個請求的地址
  4. proxy_cookie_path 針對的是 服務器響應頭中的Set-cookie的Path屬性,由於後臺服務器返回給前臺的cookie是帶有自身的contextpath的,好比:springboot中配置了server.servlet.content-path=mall或者tomcat中的工程名字是 mall ,那麼響應給前臺的Set-cookie的path就是 /mall,可是瀏覽器在登錄之後的請求時帶的cookies就沒有 path屬性,這會致使登錄狀態失效;因此 proxy_cookie_path是將 服務器返回 的cookies 的path進行轉換的,上面的配置是將服務器返回的cookies路徑的前綴去掉第一段

《完》spring

相關文章
相關標籤/搜索