location的相关知识点:

    模块:ngx_http_core_module
    官网:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

    location的语法结构:

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

    理解及测试:

    location = /uri “=”表示精准匹配,只要完全匹配上才能生效

    location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后

    location / 通用匹配,任何未匹配到其他location的请求都会匹配到

    location ^~ /uri 开头对URL路径进行前缀匹配,并且在正则之前,一旦匹配到最长匹配,则不再查 找其他匹配项

    location ~ pattern 开头表示区分大小写的正则匹配

    location ~* pattern 开头表示不区分大小写的正则匹配,如果有多个location匹配,则选择匹配最长的 那个
    精准匹配: 相等(=)
    字符串匹配:字符串匹配(空格)、匹配开头(^~)
    正则匹配: 区分大小写匹配(~)、不区分大小写匹配(~)、区分大小写不匹配(!~)、不区分大小写不匹配(!~

    优先级:

    精准匹配 > 字符串匹配(长 > 短,^~匹配是最长匹配则停止匹配) > 正则匹配(先后顺序)

    精准匹配只能匹配一个

    字符串匹配使用匹配最长的为匹配结果

    正则匹配按照location定义的顺序进行匹配,先定义具有最高优先级

    注:字符串匹配优先搜索,但是只是记录下最长的匹配(如果^~是最长匹配,则会直接命中,停止搜索正则),然后继续正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配

    匹配顺序:

    1)精准匹配,若成功,则停止后面的步骤,若没有,继续下面的步骤

    2)普通匹配(若有多个匹配项匹配成功,那么选择匹配长的并记录,并继续下面的匹配步骤,若这个匹配长的记录刚好是^~,那么就不再进行下面的步骤)

    3)正则表达式匹配(若匹配到了,那么返回正则表达式匹配到的;若有多个正则匹配到了,那么选择配置文件正则在前面的那一个,若没有,那么返回第二步中,匹配最长的那个)

    相关参考文献:https://www.cnblogs.com/lemon-le/p/8215320.html