用户请求时发出请求后,服务器会先进行域名匹配(server_name),然后再进行uri匹配,uri中如果没有使用 正则表达式,Nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则uri和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

匹配符 匹配规则 优先级
= 精确匹配url(不区分大小写) 1
^~ 匹配uri,不使用正则表达式,高优先级 2
~ 区分大小写的正则规则 3
~* 不区分大小写的正则匹配 4
/ 通用匹配,任何请求都会匹配到,其他location匹配失败才会走这里 4
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        # 精确匹配uri 不区分大小写
        location = /a {
            default_type text/html;
            echo "/a";
        }

        # 匹配uri,不使用正则表达式,高优先级
        location ^~ /a/a {
            default_type text/html;
            echo "/a/a";
        }

        # 区分大小写的正则规则
        location ~ /\d {
            default_type text/html;
            echo "匹配所有数字";
        }

        # 不区分大小写的正则匹配
        location ~* /\w {
            default_type text/html;
            echo "不区分大小写的正则匹配";
        }

        # 通用匹配,任何请求都会匹配到,其他location匹配失败,默认会匹配
        location / {
            default_type text/html;
            echo "/";
        }

        # 不区分大小写匹配,只要用户访问.jpg,gif,png,css 都走这里
        location ~* .*\.(.jpg|gif|js|css)$ {
           # 缓存......

        }

        # 拦截后缀名为 zip rar ...
        location ~ \.(zip|rar|sql|bak|gz|7z)$ {
          return 444;
        }
    }
}