上周有个同事配置FastDFS的图片服务,文件明明存在,访问却一直404。排查半天,最后发现是nginx的location匹配顺序问题。这个坑我也踩过,而且踩过不止一次。
很多人觉得nginx配置很简单,location写对路径就行。但实际项目中,location写了一堆,正则、前缀混在一起,请求到底走哪个?这个问题看似基础,却是线上故障的高发区。
一、location的5种匹配类型
先看nginx支持哪些location写法:
# 1. 精确匹配
location = /api/user {
# 只匹配 /api/user,多一个字符都不行
}
# 2. 前缀匹配(停止正则搜索)
location ^~ /static/ {
# 匹配 /static/ 开头的所有路径
# 匹配成功后,不再检查正则location
}
# 3. 正则匹配(区分大小写)
location ~ \.php$ {
# 匹配以 .php 结尾的请求
}
# 4. 正则匹配(不区分大小写)
location ~* \.(gif|jpg|png)$ {
# 匹配 .gif/.jpg/.png 结尾,不区分大小写
}
# 5. 普通前缀匹配
location /api/ {
# 匹配 /api/ 开头的所有路径
}
这5种写法,看着都懂,但放在一起,谁先谁后?
二、优先级规则:记住这4句话
nginx的


闽公网安备 35020602001684号