nginx的location块位于server内,按=、^~、最长前缀、正则顺序匹配uri;支持精确、前缀、正则(~和~*)、非正则否定(^~)及命名(@)五类修饰符,优先级决定实际生效规则。

Nginx 的 location 块写在 server 块内部,用于定义如何处理匹配特定 URI 路径的请求。核心是“匹配规则 + 处理指令”,顺序和优先级直接影响行为,不能只看位置先后。
location 块的基本语法和匹配类型
每个 location 以 location 关键字开头,后接匹配符和路径表达式,再用大括号包裹配置指令:
-
前缀匹配(最常用):
location /static/ { ... }—— 匹配以/static/开头的 URI,区分大小写,不支持正则 -
精确匹配:
location = /favicon.ico { ... }—— 只匹配完全相同的 URI,优先级最高 -
正则匹配:
location ~ \.(js|css|png)$ { ... }(区分大小写),或~*(忽略大小写) -
非正则否定匹配:
location ^~ /api/ { ... }—— 若匹配成功,不再检查正则 location,适合静态前缀场景
匹配优先级必须理清
Nginx 不按配置文件顺序执行,而是按固定优先级选中一个 location 块:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 先找
=精确匹配 → 成功则直接使用 - 再找
^~前缀匹配 → 成功则停止搜索(不进正则) - 接着收集所有普通前缀匹配(无修饰符),取最长前缀
- 最后才按配置顺序检查正则匹配(
~和~*),命中第一个即停
例如请求 /api/v1/users.png,即使有 location ~ \.png$,若存在 location ^~ /api/,仍会优先进入后者。
常见实用写法示例
实际配置中常组合使用,兼顾静态资源、API 转发和兜底逻辑:
- 静态文件直接返回:
location /assets/ { alias /var/www/static/assets/; }(注意alias末尾斜杠) - 前端单页应用(SPA)路由兜底:
location / { try_files $uri $uri/ /index.html; } - 反向代理 API:
location /api/ { proxy_pass http://backend; }(proxy_pass末尾斜杠影响路径重写) - 禁止访问敏感文件:
location ~ /\.(htaccess|env|log)$ { deny all; }
几个易错细节
看似简单,但几处细节常导致行为异常:
-
location /a会匹配/abc和/a?x=1—— 匹配的是 URI 路径部分,不含 query string -
proxy_pass后带路径时会重写 URI:location /api/ { proxy_pass http://upstream/backend/; }中,/api/user会被转为/backend/user -
alias和root行为不同:root /data; location /img/ { ... }对应/data/img/;而alias /data/img/;直接映射到该目录,不拼接 - 正则 location 内部不能再嵌套
location,只能放处理指令(如return、proxy_pass)










