普通前缀匹配语法为location /path {…},按最长前缀原则匹配,如请求/api/v2/users/123优先匹配/location /api/v2而非/location /api;其优先级低于=、^~和正则匹配,且区分大小写。

普通前缀匹配是 Nginx location 最常用也最容易被误解的基础用法。它不加任何修饰符(比如 =、^~、~),只写 location /path { ... },靠“最长前缀”原则生效。
普通前缀匹配怎么写
语法很简单:
-
location /api { ... }→ 匹配/api、/api/users、/api/v1/login,但不匹配/apis或/xapi -
location /static/ { ... }→ 注意结尾斜杠,匹配/static/css/main.css,但不匹配/static(少斜杠)或/statics/ -
location / { ... }→ 匹配所有请求,是兜底规则,优先级最低
它怎么决定用哪个配置
多个普通前缀同时存在时,Nginx 不看顺序,只比谁的路径前缀和请求 URI **重合得更长**:
- 请求
/api/v2/users/123同时匹配:location /api、location /api/v2、location / - 其中
/api/v2(长度5)比/api(长度4)长,所以选它 - 即使
location /api在配置文件里写在前面,也无效
它和其他匹配类型的关系
普通前缀匹配优先级不高,容易被覆盖:
- 如果请求同时命中一个普通前缀(如
location /api)和一个正则(如location ~ \.php$),正则会赢——哪怕它写在后面 - 如果写了
location ^~ /api,它会直接终止后续正则扫描,确保前缀逻辑不被干扰 -
location = /api是精确匹配,只响应/api这个完整路径,连/api/都不匹配
常见踩坑提醒
实际配置中这几个点最容易出问题:
-
root 和 alias 拼接方式不同:用
root /var/www时,location /static/对应真实路径是/var/www/static/;而alias /var/www/res/会让/static/直接映射到/var/www/res/,末尾斜杠必须对齐 - 看似匹配了,却 404:大概率是路径拼错,或者没注意大小写(普通前缀区分大小写)
-
想代理 /api 到后端,却漏了 proxy_pass 的斜杠处理:比如
proxy_pass http://backend/api;和proxy_pass http://backend/;行为完全不同,前者会把请求路径整体拼上去,后者会替换掉匹配部分


















