目录
Nginx的try_files
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数,只有最后一个参数可以引起一个内部重定向。之前的参数只设置内部的URI指向,最后一个参数是回退的URI且必须存在,否则将会出现内部500错误
try_files格式:
location / { try_files $uri $uri/ /index.php; }#1.检查用户请求的uri内容是否存在当前本地磁盘,存在则解析#2.将请求加/,类似于重定向处理#3.前两者匹配不到,最后交给index.php处理
1.环境准备
$ echo "Try-Page" > /data/www/index.html
2.配置nginx的try_file
$ cat /etc/nginx/conf.d/try_files.confserver { listen 80; server_name www.hhjy.org; root /data/www/; index index.html; location / { try_files $uri $uri/ /index.html; }}
3.测试
$ curl www.hhjy.com/cache/xx1.htmlTry-Page // 返回的是index.html的内容// 访问流程curl www.hhjy.com/cache/xx1.html首先nginx会在该虚拟主机root关键字所定义的路径/data/www下查找cache/xxindex.ht,如果该文件不存在,则会返回/data/www/index.html
示例一:跳转到指定后端
server { listen 80; server_name 10.4.7.7; root /data/code; index index.html; location / { try_files /a.html /b.html @java_page; # 检查文件a.html、b.html,如果存在则正常显示,不存在就去查找@java_page的值。 } location @java_page { proxy_pass http://172.16.1.7:8080; # 转发到 172.16.1.7:8080 } }
实例二:跳转到指定文件
server { listen 80; server_name 10.4.7.7; root /data/code; index index.html; location /abc { try_files /a.html /b.html /c.html; }