精确匹配(=)要求uri完全一致且立即终止匹配,正则匹配(~或~*)按规则扫描并支持通配,区分大小写与否取决于符号,且在前缀匹配后按序执行。

精确匹配和正则匹配是 Nginx 中两种完全不同机制的 location 匹配方式,核心区别在于匹配逻辑、触发条件和执行优先级。
匹配逻辑不同
精确匹配(=)要求 URI 与配置中的路径完全一致,包括大小写、斜杠位置、无多余字符。例如 location = /api 只匹配 /api 这个完整路径,不匹配 /api/、/api/v1 或 /API。
正则匹配(~ 或 ~*)基于正则表达式引擎进行模式扫描,支持通配、分组、后缀判断等灵活规则。例如 location ~ \.js$ 可匹配 /static/app.js、/admin/index.min.js,只要结尾是 .js 即可。
是否区分大小写
~ 是区分大小写的正则匹配,/Login 和 /login 视为不同路径;~* 则忽略大小写,两者都能命中同一规则。
精确匹配本身天然区分大小写——因为它是字符串全等判断,location = /Login 不会响应 /login 请求。
匹配时机与覆盖行为
精确匹配一旦成功,立即生效并终止后续所有匹配过程,不检查其他 location 块。
正则匹配在普通前缀匹配之后才被考虑:Nginx 先找出所有可能的前缀匹配(含 ^~ 和无修饰符),记住最长的那个;再按配置文件中从上到下的顺序,逐条尝试正则规则,第一个成功匹配的正则 location 就会覆盖之前记住的前缀结果。
- 若存在
location ^~ /static,它匹配成功后直接停止,连正则都不再看 - 若只有
location /static和location ~ \.(css|js)$,且请求是/static/main.css,则最终采用正则规则
适用场景差异
精确匹配适合固定入口点,比如登录页 location = /login、健康检查接口 location = /healthz,确保行为绝对可控。
正则匹配适合批量处理相似资源,如静态文件类型分发:location ~* \.(png|jpg|gif|webp)$,或动态脚本路由:location ~ ^/api/v\d+/,用模式代替大量重复配置。











