路漫漫其修远兮
吾将上下而求索

nginx学习:try_files参数讲解

Nginx的配置语法灵活,可控制度非常高。在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率。

try_files指令:

语法:try_files file … uri 或 try_files file … = code

默认值:无

作用域:server location

下面是一个示例:

当用户在浏览器输入http://192.168.170.10或者http://192.168.170.10/index.html或者http://192.168.170.10/index.php时,根据try_files规则,可以找到该域名对应的web页面;

现在有两个项目,通过不同路径来区分,需求是当用户访问该项目不存在的路径的时候,返回当前项目的登录页面

需求是当访问:http://192.168.170.10/test/abc/def 等不存在的页面,返回http://192.168.170.10/test页面

需求是当访问:http://192.168.170.10/app/abc/def 等不存在的页面,返回http://192.168.170.10/app页面

需求是当访问:http://192.168.170.10/ghi/abc/def 等不存在的页面,返回http://192.168.170.10/404.html页面

当用户在浏览器输入http://192.168.170.10/test/abc/def等不存在的域名时,根据try_files规则,“$uri”和“$uri/”都不符合,所以nginx就自动把域名转换为http://192.168.170.10/test,然后将http://192.168.170.10/test页面内容反馈给客户端,但是客户端的url还是http://192.168.170.10/test/abc/def不变

try_files的作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。

需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向(如下图)。最后一个参数是回退URI且必须存在,否则会出现内部500错误。

[root@master-10 /data/web]#tree .
.
├── 404.html
├── app
│?? └── index.html
├── hourse
│?? └── index.html
├── index.html
└── test
    ├── index.html
    └── pc
        └── index.html

3 directories, 5 files
[root@master-10 /data/web]#cat 404.html 
404
[root@master-10 /data/web]#cat app/index.html 
/data/web/app
[root@master-10 /data/web]#cat hourse/index.html 
/data/web/hourse
[root@master-10 /data/web]#cat index.html 
/data/web
[root@master-10 /data/web]#cat test/index.html 
/data/web/test
[root@master-10 /data/web]#cat test/pc/index.html 
/data/web/test/pc


[root@master-10 /usr/local/nginx/conf/conf.d]#cat 80.conf
#
# The default server
#

server {
    listen       80 default_server;
    server_name  _;
    root /data/web;

    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /404.html; 
    }

    location /test {
        try_files $uri $uri/ /test/index.html; 
    }

    location /app {
        try_files $uri $uri/ /app/index.html; 
    }


}

一个项目的首页

image.png

当访问url不存在的时候,返回/app的页面,但是url不变,只是将/app的内容返回

image.png

当访问其他路径不存在的时候,返回主页的404页面

image.png

首页

image.png

只要路径存在,就能正常访问,上面的try_files是针对的不存在的页面才会处理

image.png

image.png

未经允许不得转载:江哥架构师笔记 » nginx学习:try_files参数讲解

分享到:更多 ()

评论 抢沙发

评论前必须登录!