一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 负载均衡中如何利用 include 配置将庞大的 upstream 集群抽离独立管理

时间:2026-08-17 12:32:49 编辑:袖梨 来源:一聚教程网

Nginx通过include指令将upstream块抽离至独立文件(如/etc/nginx/upstreams/*.conf)实现模块化管理,必须置于http{}块内引入,支持通配符、绝对/相对路径,配合nginx -t验证和reload热更新,提升可维护性与环境分治能力。

直接在主配置里堆砌大量 upstream 定义,会让 nginx.conf 越来越臃肿、难维护、易出错。用 include 把 upstream 集群抽离到独立文件,是生产环境的标准做法——既保持主配置干净,又支持按业务、环境或团队分治管理。

把 upstream 块单独写进外部文件

/etc/nginx/ 下新建专用目录和文件,比如:

  1. /etc/nginx/upstreams/ —— 存放所有 upstream 定义
  2. /etc/nginx/upstreams/static.conf:静态资源集群
  3. /etc/nginx/upstreams/api.conf:API 动态服务集群
  4. /etc/nginx/upstreams/admin.conf:后台管理系统集群

每个文件只写一个或一组逻辑相关的 upstream,例如 static.conf 内容为:

upstream static_servers {server 192.168.1.10:80;server 192.168.1.11:80 weight=2;keepalive 32;}

注意:这些文件本身不包含 http{} 或任何外层块,只写纯 upstream 块,Nginx 会原样注入到所在位置。

在 http 块中用 include 引入

打开 /etc/nginx/nginx.conf,定位到 http { ... } 块内部(必须在 http 块内,不能在 events 或全局域),添加:

http {include /etc/nginx/mime.types;default_typeapplication/octet-stream;
# 批量引入所有 upstream 定义include /etc/nginx/upstreams/*.conf;# 或按需单个引入(更可控)# include /etc/nginx/upstreams/static.conf;# include /etc/nginx/upstreams/api.conf;server {listen 80;location / {proxy_pass http://static_servers;}}

}

路径支持通配符 *,也支持绝对路径和相对路径(相对路径以 nginx 配置根目录为基准)。

配合 reload 实现热更新与灰度切换

抽离后,修改某个 upstream 不再需要动主配置。只需:

  1. 编辑对应文件,比如改 /etc/nginx/upstreams/api.conf 中的服务器地址或权重
  2. 运行 sudo nginx -t 验证语法(Nginx 会自动加载 include 的内容)
  3. 执行 sudo systemctl reload nginx 生效,零中断

还可结合软链接做环境切换:建 upstreams-prod.confupstreams-staging.conf,用 ln -sf 切换当前生效的文件,适合多环境部署。

进阶:用变量 + map 实现动态 upstream 选择

如果想根据请求头、域名或参数决定走哪个 upstream,可在 include 文件中定义多个 upstream,再用 map 指令生成变量,最后在 proxy_pass 中引用:

# 在 http 块中(可放在 include 后面)map $host $backend_group {~^api. example.com$api_servers;~^static.example.com$static_servers;default api_servers;}

server { location / { proxy_pass https://www.php.cn/link/093d559928d57fc466488f5176506e29; } }

这样就把“路由逻辑”和“服务器列表”彻底解耦,upstream 文件只管“有哪些机器”,maplocation 管“什么时候用哪组”。

热门栏目