锐辉高防定制服务器租用 网站搭建服务器Nginx配置location优先级详解服务器

  1. 去年
    去年,由 白敏敏 重新编辑

    锐辉高防定制服务器租用 网站搭建服务器Nginx配置location优先级详解服务器
    服务器咨询敏敏QQ:2853898501 / 3007425289 电话微信:18316411879

    Nginx location优先级详解:
    nginx location语法规则:location [=|~|~*|^~|/] /uri/ { … }
    nginx的location匹配的变量是$uri
    QQ截图20191120103710.png
    优先级规则:

    = 高于 ^~ 高于 ~* 等于 ~ 高于 /

    规则示例:

    location = “/12.jpg” { … }
    如:
    www.test.com/12.jpg 匹配
    www.test/abc/12.jpg 不匹配

    location ^~ “/abc/” { … }
    如:
    www.test/abc/123.html 匹配
    www.test.com/a/abc/123.jpg 不匹配

    location ~ “png” { … }
    如:
    www.test.com/aaa/bbb/ccc/123.png 匹配
    www.test.com/aaa/png/123.html 匹配

    location ~* “png” { … }
    如:
    www.test.com/aaa/bbb/ccc/123.PNG 匹配
    www.test.com/aaa/png/123.html 匹配

    location /admin/ { … }
    如:
    www.test.com/admin/aaa/1.php 匹配
    www.test.com/123/admin/1.php 不匹配

    对比 / 和 ~
    示例1:

    server{
    listen 80;
    server_name www.test.com;
    root /tmp/123.com;

    location /abc/
    {
    echo "/";
    }
    location ~ 'abc'
    {
    echo "~";
    }
    }
    测试命令:curl -x127.0.0.1:80 ‘www.test.com/abc/1.png’
    结果是:~

    对比 ~ 和 ~*
    示例2:

    server
    {
    listen 80;
    server_name www.test.com;
    root /tmp/123.com;

    location ~ 'abc'
    {
    echo '~';
    }
    location ~* 'abc'
    {
    echo '~*';
    }
    }
    测试命令:curl -x127.0.0.1:80 ‘www.test.com/abc/123.html’
    结果是:~

    示例3:

    server
    {
    listen 80;
    server_name www.test.com;
    root /tmp/123.com;

    location ~* 'abc'
    {
    echo '~*';
    }
    location ~ 'abc'
    {
    echo '~';
    }
    }
    测试命令:curl -x127.0.0.1:80 ‘www.test.com/abc/123.html’
    结果是:~*

    结论:~ 和 ~*优先级其实是一样的,如果两个同时满足条件,配置文件中哪个location靠前,哪个生效。

    对比 ^~ 和 ~
    示例4:

    server
    {
    listen 80;
    server_name www.test.com;
    root /tmp/123.com;

    location ~ '/abc'
    {
    echo '~';
    }
    location ^~ '/abc'
    {
    echo '^~';
    }
    }
    测试命令:curl -x127.0.0.1:80 'www.test.com/abc/123.html
    结果是:^~

    对比 = 和 ^~
    示例5:

    server
    {
    listen 80;
    server_name www.test.com;
    root /tmp/123.com;

    location ^~ '/abc.html'
    {
    echo '^~';
    }
    location = '/abc.html'
    {
    echo '=';
    }
    }

    测试命令:curl -x127.0.0.1:80 'www.test.com/abc.html
    结果是:=

    补充:
    location不支持 ! 取反
    错误示例:location !~ .*.jpg {…}
    可以使用if:if ( $uri !~ ‘.jpg’) {…}

 

或者 注册后参与话题.