Nginx的 Location匹配规则,泣血总结

大神们,请分析下,Nginx的 Location匹配规则,泣血总结
最新回答
星河明淡

2024-10-16 10:24:53

Location语法是Nginx配置文件中的核心元素之一,用于定义特定URL的响应方式。配置格式如下:location [=|~|~*|^~] /uri/ { … }。

当使用`=`开头时,表示精确匹配,例如`/zg/`,仅在请求URL完全匹配`/zg/`时生效。

使用`^~`开头表示匹配以某个常规字符串开头的URL路径,如`/static/`,请求如`/static/20%/aa`将被匹配,注意URL中的空格不会被编码处理。

`~`表示区分大小写的正则匹配,如`/images/a`会匹配到`/images/`。

`~*`表示不区分大小写的正则匹配,如`/images/a`同样匹配到`/images/`。

`!~`和`!~*`则分别表示区分大小写不匹配和不区分大小写不匹配的正则。

通用匹配规则`/`表示任何请求都将匹配。

1. 精准匹配和一般匹配
请求URL为`192.168.60.106/zg/`时,精确匹配`=/zg/`优先。

2. 精准匹配和一般匹配,uri后面不带“/”
请求URL为`192.168.60.106/zg`时,一般匹配`/zg`优先。

3. 精准匹配和一般匹配,uri前面和后面都不带“/”
请求URL为`192.168.60.106 zg`时,一般匹配`zg`优先。

4. 精准匹配和一般匹配,uri带"/"和不带"/"匹配
请求URL为`192.168.60.106/zg/`时,无论是否带"/",一般匹配`/zg/`优先。

在配置中,路径相同的精准匹配优先。若使用`^~`开头,则停止正则匹配,但继续进行一般匹配。

`~`表示正则匹配时,需区分大小写。而`^~`则表示非正则匹配,即使存在后续正则匹配也不会继续搜索。

严格精准匹配优先于正则匹配,例如`/`和`~ \.html$`的匹配逻辑。

正则匹配遵循配置顺序,由上至下依次匹配,一旦匹配成功即结束解析过程。

`@`开头的uri在请求命中时返回指定页面,未命中时则代理请求至其他服务器,实现容错机制。

总结而言,Location配置中的匹配规则需遵循优先级原则,从精确到一般,从正则到非正则,确保Nginx在处理HTTP请求时能高效准确地响应。