美文网首页
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