美文网首页
Nginx location匹配规则

Nginx location匹配规则

作者: yellow_han | 来源:发表于2019-05-28 10:11 被阅读0次

location [=|~|~*|^~|@] pattern { ... }

匹配顺序

  • 精确匹配 =
  • 前缀匹配 ^~(立刻停止后续的正则搜索)
  • 按文件中顺序的正则匹配 *
  • 匹配不带任何修饰的前缀匹配。

1、「=」 修饰符:要求路径完全匹配

2、「~」修饰符:区分大小写的正则匹配

3、「~*」不区分大小写的正则匹配

4、「^~」修饰符:前缀匹配 如果该 location 是最佳的匹配,那么对于匹配这个 location 的字符串, 该修饰符不再进行正则表达式检测。注意,这不是一个正则表达式匹配,它的目的是优先于正则表达式的匹配。

示例1

server {
    server_name website.com;
    location /doc {
        return 701; 
    }
    location ~* ^/document$ {
        return 702; 
    }
}

curl -I  website.com:8080/document
HTTP/1.1 702

示例2

server {
    server_name website.com;
    location /document {
        return 701;
    }
    location ~* ^/document$ {
        return 702;
    }
}
curl -I  website.com:8080/document
HTTP/1.1 702

示例3

server {
    server_name website.com;
    location ^~ /doc {
        return 701;
    }
    location ~* ^/document$ {
        return 702;
    }
}
curl http://website.com/document
HTTP/1.1 701

示例4

server {
    server_name website.com;
    location /docu {
        return 701;
    }
    location /doc {
        return 702;
    }
}
server {
    server_name website.com;
    location /doc {
        return 702;
    }
    location /docu {
        return 701;
    }
}
curl -I website.com:8080/document 
HTTP/1.1 701
#前缀匹配下,返回最长匹配的 location,与 location 所在位置顺序无关

示例5

server {
    listen 8080;
    server_name website.com;

    location ~ ^/doc[a-z]+ {
        return 701;
    }

    location ~ ^/docu[a-z]+ {
        return 702;
    }
}
#curl -I website.com:8080/document 返回 HTTP/1.1 701
server {
    listen 8080;
    server_name website.com;

    location ~ ^/docu[a-z]+ {
        return 702;
    }
    
    location ~ ^/doc[a-z]+ {
        return 701;
    }
}
#curl -I website.com:8080/document 返回 HTTP/1.1 702
#正则匹配是使用文件中的顺序,找到返回

5、「@」修饰符:主要起转发作用

以下配置,当出现404的时候,会跳转到百度
server {
       listen       80;
       server_name  localhost;
        location  / {
           root   html;
           index  index.html index.htm;
           allow all;
       }
       #error_page 404 [http://www.baidu.com](http://www.baidu.com/) # 直接这样是不允许的
       error_page 404 = @fallback;
       location @fallback {
           proxy_pass http://www.baidu.com;
       }
}

相关文章

网友评论

      本文标题:Nginx location匹配规则

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