在 Nginx 中,try_files
是一個(gè)極為實(shí)用的指令,主要用于 按順序檢查文件或路徑是否存在,并返回第一個(gè)匹配到的資源或執(zhí)行備用操作。它常見于 server
或 location
塊中,尤其在單頁應(yīng)用(SPA)、靜態(tài)資源服務(wù)和 URL 重寫等場景下發(fā)揮關(guān)鍵作用,語法如下:location / {
try_files file1 file2 ... fallback;
}
1、檢查靜態(tài)資源是否存在,不存在返回abc目錄下默認(rèn)文件index.html,查看nginx配置文件,如圖:
上述配置理解為:如果默認(rèn)情況下什么路由都不加,那么請(qǐng)求到abc/index.html,如果請(qǐng)求的時(shí)候加了一個(gè)路由,比如 “ip/about.txt”,那么首先會(huì)查找abc路徑下是否有about.txt文件,此時(shí)about.txt對(duì)應(yīng)的就是"$uri",如果沒有找到about.txt,那么繼續(xù)查找abc路徑下是否有about.txt目錄,這個(gè)about.txt目錄對(duì)應(yīng)的就是”$uri/” ,如果有,那么就請(qǐng)求about.txt目錄的內(nèi)容,如果也沒有這個(gè)目錄,那么就返回默認(rèn)的頁面,也就是最開始的abc/index.html注:找about.txt目錄下的文件默認(rèn)也是index.html(1)、如果什么路徑都不加,直接使用IP訪問,默認(rèn)會(huì)找到abc下的index.html,如圖:(2)、在abc目錄下定義about.txt目錄,在此目錄下定義index.html文件,寫入內(nèi)容,通過ip/about.txt訪問,如圖:注:因?yàn)閍bc目錄下沒有about.txt文件,但是有about.txt目錄,因此跳過$uri,繼續(xù)找$uri/,找到了并返回結(jié)果(3)、在abc目錄下定義test.txt文件,寫入內(nèi)容,此時(shí)通過ip/test.txt訪問,如圖:此時(shí)符合了第一個(gè)$uri,因此不會(huì)繼續(xù)向后面查找了(4)、直接通過ip請(qǐng)求未知的資源路徑,ip/gong.doc,回到了默認(rèn)頁面,如圖:因?yàn)閍bc路徑下不存在gong.doc也不存在這個(gè)目錄,因此就會(huì)找到最終的/index.html2、檢查靜態(tài)文件是否存在,不存在則轉(zhuǎn)發(fā)到后端應(yīng)用,源nginx的配置,如圖:上圖中的配置可以理解為如果請(qǐng)求的路由不匹配$uri和$uri/,那么會(huì)轉(zhuǎn)發(fā)到@backend的后端服務(wù),這個(gè)backend名稱是自定義的,因此如果請(qǐng)求http://192.168.49.83/test_route的時(shí)候,但是本地沒有對(duì)應(yīng)的匹配,因此會(huì)轉(zhuǎn)發(fā)到http://192.168.49.224/test_route,這個(gè)test_route會(huì)帶到后端去的這里還是以兩個(gè)nginx的靜態(tài)頁面舉例:(1)、修改49.224的nginx配置文件,添加內(nèi)容如圖:注:在后端的nginx配置中,也要有這個(gè)test_route路由,否則會(huì)報(bào)404錯(cuò)誤(2)、在/data/html目錄下新建test_route目錄并定義index.html文件,如圖:(3)、此時(shí)通過源IP來請(qǐng)求test_route路由,因?yàn)楫?dāng)前沒有匹配,就會(huì)跳轉(zhuǎn)到后端服務(wù)去,如圖:上述NGINX配置中有個(gè)參數(shù),如下:add_header X-Tried-File $uri always;
此參數(shù)的意思是在 HTTP 響應(yīng)頭 中新增一個(gè)自定義頭字段 X-Tried-File
,其值為 用戶實(shí)際請(qǐng)求的文件路徑(即 $uri
變量),查看響應(yīng)頭信息,可以看到X-Tried-File,如圖:3、檢查靜態(tài)文件是否存在,不存在直接返回404,如圖:請(qǐng)求gong.txt,既不存在此文件也不存在此目錄,因此直接返回404,如圖:4、訪問頁面,直接返回狀態(tài)碼,適合維護(hù)頁面,如圖:在abc目錄下定義maintenace.html(名字要與nginx配置名字一致),然后通過192.168.49.83請(qǐng)求,如圖:上面配置理解為:如果請(qǐng)求/hello,那么匹配/custom/hello,如果匹配不到就繼續(xù)匹配/default/hello,如果都匹配不到就返回404(1)、在abc目錄下新建custom目錄并在內(nèi)部創(chuàng)建gong.txt文件,新建default目錄并在內(nèi)部新建guan.txt,通過url請(qǐng)求,如圖:
閱讀原文:原文鏈接
該文章在 2025/8/15 12:36:28 編輯過