nginx 通过 location 配置实现路径代理,核心是 proxy_pass 配合前缀(如 /api/)、正则(~/.js$/)和精确匹配(=/healthz),注意末尾斜杠控制路径重写,避免重复路径与匹配冲突。

Nginx 中通过 location 配置将不同路径前缀代理到不同后端服务,核心是利用 proxy_pass 指令配合精确匹配、前缀匹配或正则匹配规则,同时注意路径重写细节。
用前缀匹配区分目录并代理
最常用方式是使用以 / 开头的字符串前缀匹配,Nginx 会按最长前缀优先原则选择 location 块:
-
location /api/匹配所有以/api/开头的请求(如/api/users、/api/v1/orders) -
location /static/匹配静态资源路径,可单独指向文件系统或 CDN - 注意末尾斜杠:`location /api` 会匹配
/api、/apixxx;而location /api/只匹配以/api/开头的路径,更安全
示例配置:
location /api/ {
proxy_pass http://backend-api/;
}
location /admin/ {
proxy_pass http://backend-admin/;
}
location / {
proxy_pass http://frontend-app/;
}
关键点:proxy_pass 后带斜杠(如 http://backend-api/),Nginx 会自动剥离匹配的前缀(/api/)再拼接转发,避免出现 /api/api/xxx 的重复路径。
用正则匹配实现灵活路由
当需要按文件类型、版本号或动态路径结构分发时,可用 ~(区分大小写)或 ~*(不区分大小写)正则匹配:
-
location ~ ^/v\d+/user/匹配/v1/user/xxx、/v2/user/list -
location ~* \.(js|css|png|jpg)$统一处理静态资源,可直接root或alias到本地目录 - 正则匹配优先级高于前缀匹配(除
=精确匹配外),但同级中按配置顺序生效
用 = 精确匹配提升性能和准确性
对固定路径(如健康检查、入口页)用 = 可跳过其他匹配,响应更快且避免歧义:
location = /healthz { return 200 "OK"; }location = / { proxy_pass http://landing-page/; }- 注意:
= /只匹配根路径,不匹配/abc;若需同时支持根和子路径,仍需搭配location /
常见陷阱与建议
- 路径截断错误:若
proxy_pass不加斜杠(如http://host),Nginx 不会自动删掉匹配前缀,导致后端收到多余路径 —— 务必统一加尾部斜杠或用rewrite显式处理 - 多个 location 冲突:避免
location /a和location /ab并存,应改为/a/和/ab/或用正则明确边界 - 继承问题:location 块内不继承 server 级的
proxy_*设置,需在每个块中显式配置超时、头信息等











