精准匹配(=)要求uri逐字符完全相同,命中即终止匹配;前缀匹配(无修饰符或^~)只要uri以指定路径开头即可,其中^~不查正则而普通前缀可能被正则覆盖。

前缀匹配和精准匹配是 Nginx location 中两种基础且优先级差异显著的匹配方式,核心区别在于“是否要求 URI 完全一致”以及“是否允许子路径延伸”。
精准匹配(=):只认完全相等的路径
使用 = 修饰符时,Nginx 要求请求 URI 与配置中的路径**逐字符完全相同**,包括斜杠数量、大小写、有无查询参数(查询参数本身不参与匹配,但路径主体必须严丝合缝)。
- location = /api 只匹配
/api,不匹配/api/、/api/v1、/xapi或/api?debug=1 - location = /healthz 是健康检查常用写法,确保只有该单一路径触发返回,避免被其他规则干扰
- 一旦命中,立即执行并终止后续所有 location 匹配,不查任何其他规则
前缀匹配(无修饰符或 ^~):接受以指定路径开头的所有 URI
前缀匹配不要求完整相等,只要请求 URI **以配置路径为开头**即可。但要注意,它又分两种行为:
-
普通前缀匹配(如
location /static/):匹配/static/a.css、/static/js/app.js,也匹配/static/本身;但它只是“暂存”结果,后续可能被正则规则覆盖 -
带 ^~ 的前缀匹配(如
location ^~ /static/):同样匹配所有以/static/开头的请求,但一旦选中,Nginx 直接采用,不再检查任何正则 location —— 这是它和普通前缀的关键分水岭 - 两者都遵循“最长前缀”原则:若同时存在
location /api/和location /api/v2/,请求/api/v2/users会命中后者
实际配置中怎么选
选精准匹配,当路径语义唯一、不容扩展,比如入口探针、固定重定向目标、管理接口根路径。
- 用
location = /拦截根请求,不希望它落到location /的兜底逻辑里 - 避免写
location = /admin/,因为这不会匹配/admin—— 精准匹配对尾部斜杠极其敏感
选前缀匹配,当需要批量处理某类路径,比如静态资源、API 版本前缀、后台路由前缀。
- 高频静态资源建议用
^~,既保证匹配效率,又防止被后置的~ \.js$类正则意外劫持 - 普通前缀适合做中间层路由,例如
location /v1/代理到后端服务,再由后端处理具体子路径











