Nginx 多后端转发核心靠 location 匹配与 proxy_pass 组合,按路径前缀、域名、静态资源直出、upstream 负载均衡四类策略实现精准分发,需注意 proxy_pass 末尾斜杠、匹配顺序、代理头及健康检查等细节。

Nginx 实现多后端转发路由,核心是靠 location 匹配规则 与 proxy_pass 目标地址 的组合,不改后端代码就能把不同请求精准分发到不同服务。关键不在“能不能”,而在路径处理、匹配顺序和代理头是否到位。
按路径前缀分发(最常用)
适合前后端分离或微服务网关场景,比如 /api/ 走 Java 服务,/admin/ 走 Python 后台,/static/ 直接读文件:
- 每个
location块用路径前缀定义边界,例如location /api/ { ... } -
proxy_pass地址末尾必须加/,Nginx 才会自动剥离匹配的前缀;不加就会重复拼接导致 404 - 示例:
location /api/ { proxy_pass http://192.168.1.10:8080/; }→ 请求/api/users转发为/users
按域名分流(适合多子系统共用 IP)
当多个业务系统共享一个公网 IP 或域名时,用 server_name 区分入口:
- 每个
server块绑定独立域名,如server_name api.example.com;和server_name admin.example.com; - 块内直接配置
proxy_pass指向对应后端,后端完全无需感知域名差异 - 可配合 SSL 配置实现 HTTPS 入口隔离,比如不同证书、不同协议版本
静态资源直出(跳过代理提升性能)
避免把图片、JS、CSS 等请求也扔给后端处理,既减压又提速:
- 用正则匹配文件后缀:
location ~* \.(js|css|png|jpg|gif|woff2)$ { root /var/www/assets; } - 必须放在所有
proxy_pass规则之前——Nginx 按最长匹配优先,否则会被路径前缀规则抢先捕获 - 可搭配
expires设置缓存时效,减少重复请求
多实例负载 + 基础容错(面向生产)
单点后端风险高,用 upstream 定义服务组,实现轮询、健康检查和故障转移:
- 在
http块外定义:upstream api_cluster { server 10.0.1.10:3000; server 10.0.1.11:3000; } - 在
location中引用:proxy_pass http://api_cluster; - 加上
proxy_next_upstream error timeout http_502;,失败时自动换节点;再配keepalive 32;复用连接
不复杂但容易忽略



















