nginx 业务路由切分核心是七层语义转发,支持按 uri 路径、host 域名、请求头/cookie、客户端 ip/地域四种方式精准分流,每种方式对应不同架构场景与配置要点。

Nginx 实现业务功能的路由切分,核心是做七层(HTTP 层)的精准转发,不是简单轮询分压,而是按业务语义把请求导向对应的服务集群。关键在于“谁的请求,走哪条路”,而不是“第几个请求,发给哪台机器”。
按 URI 路径划分功能模块
适合前后端分离、微服务 API 按域拆分的架构。比如 `/api/user/` 归用户服务,`/api/order/` 归订单服务。 - 在 `http` 块中为每类业务定义独立的 `upstream`,例如 `user_backend` 和 `order_backend` - 在 `server` 块内用 `location ^~ /api/user/` 这类前缀匹配,避免正则开销;`^~` 表示优先前缀匹配,比普通正则更高效 - `proxy_pass` 后不带尾部斜杠时,原始路径会完整透传;带斜杠则会截断匹配部分,需注意后端服务对路径的预期示例片段:
upstream user_backend { server 10.0.1.10:8080; server 10.0.1.11:8080; }
upstream order_backend { server 10.0.2.20:8080; server 10.0.2.21:8080; }
<p>server {
listen 80;
location ^~ /api/user/ {
proxy_pass <a href="https://www.php.cn/link/a238dcd0f85681efae0e4d987e692e3a">https://www.php.cn/link/a238dcd0f85681efae0e4d987e692e3a</a>;
proxy_set_header Host $host;
}
location ^~ /api/order/ {
proxy_pass <a href="https://www.php.cn/link/ac68bc93ecc07d7daec8ce924ca09b0c">https://www.php.cn/link/ac68bc93ecc07d7daec8ce924ca09b0c</a>;
proxy_set_header Host $host;
}
}</p>
按 Host 域名隔离多业务系统
适用于多租户、SaaS 或灰度环境,不同域名走完全独立的处理链路。 - 每个 `server` 块绑定唯一 `server_name`,如 `user.example.com`、`admin.example.com` - 各 `server` 内部可自定义自己的 `upstream`、`location`、SSL 证书和访问控制策略 - 域名匹配是精确或通配符匹配,不依赖路径,天然隔离路由空间按请求头或 Cookie 动态分流
常用于灰度发布、A/B 测试或内部通道。比如通过 `X-Env: staging` 或 `Cookie: env=canary` 切流。 - 使用 `map` 指令提取请求特征,映射成变量,例如:map $http_x_env $backend_group {
"staging" "staging_backend";
"prod" "prod_backend";
default "prod_backend";
} - `proxy_pass http://$backend_group;` 中的变量名必须与 `upstream` 名称严格一致 - 所有可能的映射值都得提前在 `upstream` 中定义好,否则 Nginx 启动会报错
按客户端 IP 或地域定向调度
满足数据合规(如 GDPR)、区域专属服务或 CDN 回源优化需求。 - 用 `geo` 指令基于 `$remote_addr` 划分 IP 段,生成 `$region` 变量 - 再结合 `map` 或 `if` 判断,选择对应 `upstream` - 注意:IP 地址可能被代理污染,建议配合 `X-Forwarded-For` 和 `set_real_ip_from` 使用真实客户端 IP不复杂但容易忽略











