多个 location 配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
首先匹配 = | |
其次匹配 ^~ | |
其次是按文件中顺序的正则匹配 | |
最后是交给 / 通用匹配 | |
当有匹配成功时候,停止匹配,按当前匹配规则处理请求 |
例子,有如下匹配规则:
location = / { | |
# 规则 A | |
} | |
location = /login { | |
# 规则 B | |
} | |
location ^~ /static/ { | |
# 规则 C | |
} | |
location ~ .(gif|jpg|png|js|css)$ { | |
# 规则 D | |
} | |
location ~* .png$ { | |
# 规则 E | |
} | |
location / { | |
# 规则 F | |
} |
那么产生的效果如下:
访问根目录 /, 比如 http://localhost/ 将匹配规则 A | |
访问 http://localhost/login 将匹配规则 B,http://localhost/register 则匹配规则 F | |
访问 http://localhost/static/a.html 将匹配规则 C | |
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则 D 和规则 E,但是规则 D 顺序优先,规则 E 不起作用,而 http://localhost/static/c.png 则优先匹配到规则 C | |
访问 http://localhost/a.PNG 则匹配规则 E,而不会匹配规则 D,因为规则 E 不区分大小写。 |