美文网首页
2020-03-24 Nginx Location

2020-03-24 Nginx Location

作者: 阿丧小威 | 来源:发表于2020-03-24 14:59 被阅读0次

1. Location作用

Location指令作用是可以根据用户请求URI来执行不同的应用,其实就是根据用户请求的网站的地址URL匹配,匹配成功即进行相关的操作。

2. Location语法

Location使用的语法例子为:

location [ = | ~ | ~* | ^~ ] uri {
  ...
}

Location的语法说明见下表。

对Location语法列表说明

上述语法中的URI部分是关键,这个URI可以是普通的字符串地址路径或者是正则表达式,当匹配成功则执行后面大括号里面的相关指令。正则表达式的前面还可以有~或~*等特殊的字符。
这两种特殊字符~或~*匹配的区别为:“~”用于区分大小写(大小写敏感)的匹配;“~*”用于不区分大小写的匹配。还可以用逻辑操作符!对上面的匹配取反,即!~和!~*。此外,“^~”作用是在常规的字符串匹配检查之后,不做正则表达式的检查,即如果最明确的那个字符串匹配的Location配置中有此前缀,那么不做正则表达式的检查。

3. Location匹配示例

location = / {
  [ configuration A ]
}
location / {
  [ configuration B ]
}
location /documents/ {
  [ configuration C ]
}
location ^~ /images/ {
  [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
  [ configuration E ]
}

在上述Location配置中,当用户请求“/”时将匹配configuration A,当用户请求“/index.html”将匹配configuration B;当用户请求“/documents/document.html”时将匹配configuration C;当用户请求“/images/1.gif”时将匹配configuration D;当用户请求“/documents/1.jpg”时将匹配configuration E。

不同URI对应的配置

4. Location匹配示例

下面是官方给出的Location示例,我们通过实例来验证不同的Location标签生效的顺序,Nginx的配置文件为:

[root@web01 conf]# cp extra/01_www.conf{,.ori}
[root@web01 conf]# vi extra/01_www.conf
    server {
        listen       80;
        server_name  www.etiantian.org etiantian.org;
        location / {
            return 401;
        }
    location = / {
        return 402;
    }
    location /documents/ {
        return 403;
    }
    location ^~ /images/ {
        return 404;
    }
    location ~* \.(gif|jpg|jpeg)$ {
        return 500;
    }
    access_log logs/access_www.log main gzip buffer=12k flush=5s;
    }

检查语法并使得修改的配置生效:

[root@web01 conf]# nginx -t
nginx: the configuration file /application/nginx-1.16.0//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.16.0//conf/nginx.conf test is successful
[root@web01 conf]# nginx -s reload

然后以Linux客户端为例对上述Location匹配进行真实测试,配置hosts文件如下。

[root@web01 conf]# tail -1 /etc/hosts
192.168.9.7 www.etiantian.org bbs.etiantian.org blog.etiantian.org etiantian.org

实验结果如下:

[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org
402
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
402
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/index.html
401
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
documents/document.html
403
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
images/1.gif
404
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/documents/1.jpg
500
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
oldboy/
401
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
abc/
401
用户请求的URI说明1 用户请求的URI说明2 用户请求的URI说明3

从以上多个Location的配置匹配可以看出匹配的优先顺序,具体见下表。

不用URI及特殊字符组合匹配的顺序说明

企业应用:可以匹配任意URI地址,然后做特定的事情,例如:匹配静态扩展名,然后,把请求发给静态服务器,实现动静分离。

相关文章

网友评论

      本文标题:2020-03-24 Nginx Location

      本文链接:https://www.haomeiwen.com/subject/fhcoyhtx.html