location / {
root /opt/atp/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
(以上配置,root是前端代碼存放的路徑,前后端分離)
今天遇到了一個問題,部署的應用test.zxj.com, 直接訪問域名可以跳轉(zhuǎn)到登錄頁(test.zxj.com/login),但是在登錄頁一點刷新頁面,或者直接在地址欄輸入test.zxj.com/login,就訪問不到。
問題的原因就是nginx的配置中沒有配try_files。
當用戶請求 http://test.zxj.com/example 時,這里的$uri就是/example。
try_files 會到硬盤里嘗試找這個文件。如果存在名為/$root/example(其中$root是項目代碼安裝目錄)的文件,就直接把這個文件的內(nèi)容發(fā)送給用戶。
顯然,目錄中沒有叫 example 的文件。然后就看$uri/,增加了一個 /,也就是看有沒有名為/$root/example/的目錄。
又找不到,就會 fall back 到 try_files 的最后一個選項 /index.html,發(fā)起一個內(nèi)部 “子請求”,也就是相當于 nginx 發(fā)起一個 HTTP 請求到 http://test.zxj.com/index.html。