Nginx location匹配优先级为:①精确匹配(=)→②前缀匹配(^~)→③区分大小写正则(~)→④不区分大小写正则(~*)→⑤普通前缀匹配→⑥通用匹配(/),匹配成功即停止后续搜索。
路径匹配是 Nginx 虚拟主机配置中控制请求分发的核心机制,它发生在 server 块内部,决定“同一个域名下的不同 URL 应由哪段逻辑处理”。没有 location 规则,虚拟主机就只能把所有请求交给同一套逻辑——这显然无法支撑真实网站的动静分离、API 路由、静态资源优化等需求。
每个 server 块代表一个虚拟主机(比如 example.com),而 location 块就是这个主机内部的子路由。Nginx 先根据 Host 头、IP 或端口选中某个 server,再用请求的 URI(如 /api/v1/user 或 /static/logo.png)去匹配该 server 内定义的 location 规则。
不同修饰符对应不同场景,合理搭配才能避免冲突或遗漏:
location = /favicon.ico 或 location = /robots.txt,跳过后续匹配,响应最快location ^~ /static/,匹配 /static/css/app.css 时立即终止正则搜索,防止被低优先级的 ~ .css$ 干扰location ~* .(js|css|woff2)$,不区分大小写,统一设置缓存头location /admin 匹配所有以 /admin 开头的请求,但优先级低于 ^~ 和正则Nginx 不按书写顺序,而是严格按优先级执行匹配:
= 精确匹配,命中即停^~),若遇到 ^~ 则不再检查后面的正则~ 和 ~*,第一个匹配即生效location /(只要存在)例如:location ^~ /api/ 和 location ~ /api/vd+/user 共存时,请求 /api/v2/user 会进入前者而非后者——因为 ^~ 阻断了正则匹配流程。
一个典型的生产型虚拟主机常这样组织 location:
location = / → 返回首页或重定向location ^~ /assets/ → 指向磁盘静态目录,加 expires 1y
location ~* .(png|svg|ico)$ → 单独控制图标类资源缓存策略location /api/ → 用 proxy_pass 转发到后端服务location / → 最后兜底,配合 try_files $uri $uri/ /index.html 支持单页应用(SPA)