Nginx try_files 指令常見用法示例
try_files 是 Nginx 中一個(gè)非常實(shí)用的指令,用于按順序檢查文件是否存在,并返回第一個(gè)找到的文件。如果所有文件都不存在,則執(zhí)行最后一個(gè)參數(shù)指定的回退操作(通常是返回錯(cuò)誤碼或轉(zhuǎn)發(fā)請(qǐng)求)。
基本語法
try_files file1 file2 ... =code|uri|@named_location;
常見用法示例
1.SPA(單頁應(yīng)用)常用配置
location / {
try_files $uri $uri/ /index.html;
}- 先嘗試訪問請(qǐng)求的 URI 對(duì)應(yīng)的文件
- 再嘗試訪問 URI 對(duì)應(yīng)的目錄
- 都不存在則返回
/index.html
2.帶回退代理
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend_server;
}- 靜態(tài)文件不存在時(shí)轉(zhuǎn)發(fā)到后端應(yīng)用
3.檢查多個(gè)路徑
location /images/ {
try_files /cache$uri $uri =404;
}- 先檢查緩存目錄
- 再檢查原始路徑
- 都不存在返回 404
參數(shù)詳解
$uri
當(dāng)前請(qǐng)求的 URI(不包含查詢參數(shù))
$uri/
表示目錄,會(huì)嘗試尋找目錄下的索引文件(需配合 index 指令)
回退類型
靜態(tài)文件/路徑
try_files $uri /default.html;
命名 location(@ 開頭)
try_files $uri @fallback;
location @fallback {
# 處理邏輯
}錯(cuò)誤碼
try_files $uri =404; try_files $uri =403;
代理轉(zhuǎn)發(fā)
try_files $uri @proxy;
location @proxy {
proxy_pass http://backend;
}實(shí)際應(yīng)用場景
場景1:PHP 應(yīng)用
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm.sock;
}- 防止直接訪問不存在的 PHP 文件
場景2:多級(jí)緩存
location /assets/ {
try_files /cdn-cache/$uri
/local-cache/$uri
$uri
@generate_asset;
}場景3:維護(hù)模式
location / {
try_files /maintenance.html $uri $uri/ @app;
}- 優(yōu)先顯示維護(hù)頁面
注意事項(xiàng)
- 順序重要:Nginx 按順序檢查,找到即停
- 性能影響:每個(gè)文件檢查都會(huì)產(chǎn)生磁盤 I/O
- 相對(duì)路徑:相對(duì)于
root或alias指令 - 最后參數(shù):必須指定回退操作
- 內(nèi)部重定向:
try_files會(huì)內(nèi)部重定向,可能改變$uri值
與if的對(duì)比
? 不推薦(低效):
if (-f $request_filename) {
# 處理靜態(tài)文件
}? 推薦(高效):
try_files $uri @dynamic;
調(diào)試技巧
添加調(diào)試日志:
location / {
try_files $uri $uri/ @backend;
error_log /var/log/nginx/try_files.log debug;
}try_files 的核心思想是 “按優(yōu)先級(jí)嘗試,優(yōu)雅降級(jí)”,合理使用可以大大簡化配置邏輯并提高性能。
到此這篇關(guān)于Nginx try_files 指令常見用法示例的文章就介紹到這了,更多相關(guān)Nginx try_files 指令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx代理接口訪問返回404的實(shí)現(xiàn)示例
因?yàn)椴煌瑯I(yè)務(wù)系統(tǒng)間有接口調(diào)用,存在跨域問題,為了解決同源策略,需要將接口通過nginx去轉(zhuǎn)發(fā),本文主要介紹了Nginx代理接口訪問返回404的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-06-06
prometheus監(jiān)控nginx的實(shí)現(xiàn)
這篇文章主要介紹了prometheus監(jiān)控nginx的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
nginx通過https部署vue項(xiàng)目的完整步驟
在實(shí)際開發(fā)中,我們會(huì)以https形式進(jìn)行頁面訪問,下面這篇文章主要給大家介紹了關(guān)于nginx通過https部署vue項(xiàng)目的完整步驟,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
Nginx/Openresty中啟用http2支持的方法教程
Openresty/Nginx默認(rèn)是不支持http2的,需要將http2模塊編譯進(jìn)應(yīng)用中。這篇文章主要給大家介紹了關(guān)于在Nginx/Openresty中啟用http2支持的方法教程,文中介紹的非常詳細(xì),對(duì)大家具有一的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
Nginx配置實(shí)現(xiàn)用IP灰度測試(不同用戶ID)
本文主要介紹了使用Nginx配置實(shí)現(xiàn)基于IP的灰度發(fā)布實(shí)驗(yàn),以及如何通過不同用戶ID測試灰度發(fā)布,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11

