NGINX中try_files常见用法
|
admin
2025年8月14日 20:24
本文热度 7
|
在 Nginx 中,try_files
是一个极为实用的指令,主要用于 按顺序检查文件或路径是否存在,并返回第一个匹配到的资源或执行备用操作。它常见于 server
或 location
块中,尤其在单页应用(SPA)、静态资源服务和 URL 重写等场景下发挥关键作用,语法如下:location / {
try_files file1 file2 ... fallback;
}
1、检查静态资源是否存在,不存在返回abc目录下默认文件index.html,查看nginx配置文件,如图:
上述配置理解为:如果默认情况下什么路由都不加,那么请求到abc/index.html,如果请求的时候加了一个路由,比如 “ip/about.txt”,那么首先会查找abc路径下是否有about.txt文件,此时about.txt对应的就是"$uri",如果没有找到about.txt,那么继续查找abc路径下是否有about.txt目录,这个about.txt目录对应的就是”$uri/” ,如果有,那么就请求about.txt目录的内容,如果也没有这个目录,那么就返回默认的页面,也就是最开始的abc/index.html注:找about.txt目录下的文件默认也是index.html(1)、如果什么路径都不加,直接使用IP访问,默认会找到abc下的index.html,如图:(2)、在abc目录下定义about.txt目录,在此目录下定义index.html文件,写入内容,通过ip/about.txt访问,如图:注:因为abc目录下没有about.txt文件,但是有about.txt目录,因此跳过$uri,继续找$uri/,找到了并返回结果(3)、在abc目录下定义test.txt文件,写入内容,此时通过ip/test.txt访问,如图:此时符合了第一个$uri,因此不会继续向后面查找了(4)、直接通过ip请求未知的资源路径,ip/gong.doc,回到了默认页面,如图:因为abc路径下不存在gong.doc也不存在这个目录,因此就会找到最终的/index.html2、检查静态文件是否存在,不存在则转发到后端应用,源nginx的配置,如图:上图中的配置可以理解为如果请求的路由不匹配$uri和$uri/,那么会转发到@backend的后端服务,这个backend名称是自定义的,因此如果请求http://192.168.49.83/test_route的时候,但是本地没有对应的匹配,因此会转发到http://192.168.49.224/test_route,这个test_route会带到后端去的(1)、修改49.224的nginx配置文件,添加内容如图:注:在后端的nginx配置中,也要有这个test_route路由,否则会报404错误(2)、在/data/html目录下新建test_route目录并定义index.html文件,如图:(3)、此时通过源IP来请求test_route路由,因为当前没有匹配,就会跳转到后端服务去,如图:add_header X-Tried-File $uri always;
此参数的意思是在 HTTP 响应头 中新增一个自定义头字段 X-Tried-File
,其值为 用户实际请求的文件路径(即 $uri
变量),查看响应头信息,可以看到X-Tried-File,如图:3、检查静态文件是否存在,不存在直接返回404,如图:请求gong.txt,既不存在此文件也不存在此目录,因此直接返回404,如图:4、访问页面,直接返回状态码,适合维护页面,如图:在abc目录下定义maintenace.html(名字要与nginx配置名字一致),然后通过192.168.49.83请求,如图:上面配置理解为:如果请求/hello,那么匹配/custom/hello,如果匹配不到就继续匹配/default/hello,如果都匹配不到就返回404(1)、在abc目录下新建custom目录并在内部创建gong.txt文件,新建default目录并在内部新建guan.txt,通过url请求,如图:
阅读原文:原文链接
该文章在 2025/8/15 12:36:28 编辑过