ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

测试Nginx中location的优先级!

2019-09-18 09:51:20  阅读:174  来源: 互联网

标签:优先级 Nginx 正则 location 测试 test 匹配


location [=|~|~*|^~] /uri/ { … }
 
= 开头表示精确匹配
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,
可以被规则^~ /static/ /aa匹配到(注意是空格)。 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹配到。 多个location配置的情况下匹配顺序为: 首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

======================================================================================

前提安装好Nginx后主配置文件如下:(压缩和延时可忽略)

user  nginx nginx;
worker_processes  2;
error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
   use epoll;
    worker_connections  10240;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile        on;
    server_tokens off;
    keepalive_timeout  65;
    client_header_timeout 60;
    client_body_timeout 60;
    gzip  on;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain text/javascript application/x-javascrip t text/css text/xml
    application/xml application/xml+rss;
    server {
        listen       80;
        server_name  www.source.com;
        charset uft-8;
        access_log  logs/source.com.access.log  main;
测试区
location / { return 400; } location /test { return 401; }
        location ^~/test {
                    return 402;
}

        location ^~/test/aaa {
          return 403;
}



}
}

每次修改完主配置文件都必须执行如下两条命令:

[root@localhost ~]# nginx -t
[root@localhost ~]# killall -HUP nginx                               //重启nginx

测试理论:故意把低优先级的location放前面,看是否是因为linux的从上而下匹配导致匹配紊乱

第一次测试:多个通配的优先级测试,加入location /test

[root@localhost conf]# curl -v 127.0.0.1:80/test

< HTTP/1.1 401 Unauthorized

测试结果:/test的优先级高于location /

第二次测试:location正则的优先级测试,我们加入^~/test,使用正则匹配以test开头的

[root@localhost ~]# curl -v 127.0.0.1:80/test

< HTTP/1.1 402 Payment Required

测试结果:~^/test的优先级高与/test,也就是说正则location优先级大于通配location

第三次测试:多个正则的优先级测试,我们使用两个正则,主要是来验证下,是不是正则配置得越多,优先级就越高。

[root@localhost ~]# curl -v 127.0.0.1:80/test/aaa

< HTTP/1.1 402 Payment Required

测试结果:结果返回402,也就是匹配到第一个正则后,底下的正则不会再去匹配。由于请求/test/aaa,命中^/test,所以底下的正则就无效了

第四次测试:我们加入精准匹配,也就是nginx的=,我们来测试下精准匹配的优先级

[root@localhost ~]# curl -v 127.0.0.1:80/test/aaa

< HTTP/1.1 404 Not Found

测试结果:返回404。这个说明了,精准匹配=的优先级是最高的,不管它放到哪里。

 

标签:优先级,Nginx,正则,location,测试,test,匹配
来源: https://www.cnblogs.com/cxm123123form/p/11539809.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有