nginx 一個端口布署多個單頁應用(history路由模式)。

目前web開發 使用通常先後端分離技術,而且前端負責路由。爲了美觀,會採用前端會採用h5 history 模式的路由。但刷新頁面時,前端真的會按照假路由去後端尋找文件。此時,後端必須返回index(index.html)文件纔不至於返回404。html

nginx 部署一個單頁應用很簡單:

location / {
      root   html;
      try_files $uri /index.html index.html;
   }

root是web服務器目錄,try_files 爲文件匹配,先找真實的地址($uri),若是找不到,再找index.html文件。
#此處注意,history模式不能夠使用相對位置引入方式(./)前端

但若是幾個單頁應用同時須要部署在同一臺電腦上,而且都須要佔用80或者443端口,就不太容易了。linux

介紹2種相同ip端口部署多個單頁應用(前端路由)的方法。

  1. 使用子域名區分,此種方法最是簡單。可是限制也大,必需要買域名,或者修改訪問者電腦的hosts文件。webpack

    server {
        listen       80;
        server_name  aa.gs.com;  #子域名aa訪問時
        localtion / {
           root E:/ee; #windows 路徑,E盤下面ee文件爲aa.gs.com的服務器目錄。
           try_files $uri /index.html index.html;
        }
    }
    server {
       listen       80;
       server_name bb.gs.com; #訪問子域名bb時。
       location / {
           root   /root/bb; # linux /root/bb文件夾做爲服務器目錄。
           try_files $uri /index.html index.html;
       }
    
    }
  2. 採用路徑的第一個文件夾名字做爲區分。例如:https://aa.com/a/xxhttps://aa.com/b/xx。採用ab做爲區分,分別表示不一樣的項目。
    須要設置點:nginx

  3. 前端打包後的文件引用地址,須要加上'/a/' '/b/'爲前綴 。好比 <script scr="/a/test.js"></script>(webpack 爲設置publicPath: '/a')web

  4. 前端的路由路徑必須加上/a/前綴:好比真正地址test.com/ss,需改爲test.com/a/sswindows

server {
       listen       80;
       root /root/test; #web服務器目錄;
       location ^~ /a/{
         try_files $uri /a/index.html;  #若是找不到文件,就返回 /root/test/a/index.html
       }
       location ^~ /b/{
        try_files $uri /b/index.html; #若是找不到文件,就返回 /root/test/b/index.html
       }
      
  }
相關文章
相關標籤/搜索