Nginx location匹配规则

young 455 2021-10-18

location会尝试根据用户请求中的URI来匹配上面的uri表达式,如果可以匹配,就会选择location{}块中的配置来处理用户请求。匹配方式是多样的。

location[=|~|~*] /uri/ {

​ ...

}

~ 波浪写表示执行一个正则匹配,区分大小写

~* 表示执行一个正则匹配,不区分大小写

= 进行普通字符精确匹配

URI匹配模式

location的指令分为两种匹配模式

  1. 普通字符串匹配:以=开头或者没有带正则引导符号(~)规则

    location /uri 普通匹配

    前缀匹配

    匹配采用最长匹配规则,即都匹配的情况下,会走匹配到长度最大的location

    location =/uri 精准匹配

    精准配置的优先级高于普通配置

  2. 正则匹配:以(~)开头或者(~*)开头的表示正则匹配

    location ~* \\.(jpg|png|css|js|gif)$ {
    	root html/images;
    }
    

匹配的优先级

  1. 首先看有没有精准匹配,如果有,则停止匹配过程

  2. 判断普通命中,如果有多个命中,记录下最长的命中结果,记录但不结束

  3. 继续判断正则表达式,按配置里的正则表达顺序为准,由上到下开始匹配,一旦匹配成功一个,立即返回结果并结束

    a) 普通命中,顺序无关,因为按照命中长短来决定

    b) 正则命中,顺序有关,因为是从前往后命中

实际使用建议

第一个必选规则

location =/ {
	\#代理
	proxy_pass http://tomcat:8080/index
}

第二个必选规则是处理静态文件请求,这是nginx最为http服务器的强项

有两种匹配模式,目录匹配或后缀匹配,任选其一或者搭配使用

location ^~/static/{

	root /webroot/static/;

}

location ~*\.(gif|jpg|jpeg|png|css|js|ico)$ {

	root /webroot/res/;

}

第三个规则就是通用规则,用来转发动态请求到后端服务器

非静态文件请求就默认是动态请求,根据实际请求处理

location / {

	proxy_pass http://tomcat:8080

}