学习nginx-try_files

nginx try_files
官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
按指定顺序检查文件是否存在,并且使用第一个找到的文件或者文件夹响应,如果所有文件都找不多,则会进行一个内部重定向到最后一个参数。
在这里插入图片描述
示例,访问某个图片

server {
    
    

    listen          8083;
    location        ~* .*\.(gif|jpe?g|png|gif)$ {
    
    
        root        /data/nginx/images;
        try_files   $uri  /default.jpeg  =404;


    }
    location        / {
    
    

        root       /data/nginx/images;

    }

}

root目录下有如下图片
在这里插入图片描述

当访问http://192.168.243.129:8083/dog.png 首先使用的原uri,在root下找,存在即响应该图片,
在这里插入图片描述
当访问http://192.168.243.129:8083/dog1.png 首先使用原uri找不到该图片,尝试用下一个uri响应,如果下一个也不存在,直到找到可以响应的文件,一直没找到,如果最后一位为响应码,那么直接以响应码处理请求。
在这里插入图片描述

如果root中第二个uri 的文件不存在,那么直接响应最后一个uri 或者响应码,在我们示例的配置中 直接响应404,

将root下的default.jpeg修改为xxx.jpeg
在这里插入图片描述
那么根据try_files 规则将返回404
在这里插入图片描述

有时候会有一种需求,在所有参数中找不到可以响应的文件,利用命名location将请求转向后台,有后端服务器响应。配置如下:

server {
    
    

    listen          8083;
    location        ~* .*\.(gif|jpe?g|png|gif)$ {
    
    
        root        /data/nginx/images;
        try_files   $uri  /default.jpeg  @fallback;


    }
    location        / {
    
    

        root       /data/nginx/images;

    }
    location     @fallback   {
    
    

         proxy_pass http://192.168.243.129:8081;

    }

}

当再8083服务端找不到时,这种配置会直接把uri转发到8081端,成为http://192.168.243.129:8081/dog1.png 在8081端找到dog1.png。响应该请求,如果不存在,也没有try_files 则直接响应404。
在这里插入图片描述
当然为了容错 我们也应该在后端服务器上设置try_files

配置如下:
后端配置
server {
listen 8081;
root /data/nginx/domain3;
try_files $uri /home_page.html;

}
首先我们请求的为http://192.168.243.129:8083/dog2.png, 8083 root下不存在该图片,也不存在default.jpeg 根据配置请求uri被转发到http://192.168.243.129:8081/dog2.png,但是在8081根据原uri找不到dog2.png 就会尝试下一个(也就是最后一个)uri http://192.168.243.129:8081/home_page.html,但是在8081的root下也不存在/home_page.html,那么后端$uri = /home_page.html 请求就又变为http://192.168.243.129:8081/home_page.html 找不到 尝试/home_page.html,一直循环,所以一般情况下最后一个参数要跟响应码。
在这里插入图片描述server {
listen 8081;
root /data/nginx/domain3;
try_files $uri /home_page.html =404;

}
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45937255/article/details/115330571
今日推荐