上一篇中,我们讲了nginx配置文件中location的优先级及相关知识点。
不同类型的表达式区分如下:
- 等号类型 ( = ) 的优先级最高。一旦匹配成功,则不再查找其他匹配项。
- 然后是( ^~ )类型表达式。一旦匹配成功,则不再查找其他匹配项。
- 正则表达式类型( ~ ~* )的优先级次之。如果有多个location的正则能匹配的话, 则优先使用正则表达式最长的那个。
- 最后是常规字符串匹配类型,则按照前缀来匹配。
- 当然也可以说最后是根 ( / ),因为根始终是最后匹配的。
现在接上一篇的内容,以案例来分析location优先级的问题:
- 下面2个配置同时存在时
location = / {[ configuration A ]}location / {[ configuration B ]}
此时A生效,因为 =/ 优先级高于 /
2. 下面3个配置同时存在时
location /documents/ {[ configuration C ]}location ~ /documents/ {[configuration CB]}location ~ /documents/abc {[ configuration CC ]}
当访问的url为/documents/abc/1.html,此时CC生效,优先级顺序为CC > CB > C ,因为包含的优先级高于普通路径,而包含中的精确路径更高(前提是路径精确匹配)。
3. 下面两个配置同时存在时
location ~* .(gif|jpg|jpeg)$ {[ configuration E ]}location ~ /p_w_picpaths/abc/ {[ configuration H ]}
当访问的链接为/p_w_picpaths/abc/123.jpg时,E生效。因为上面的规则更加精确。