宝塔面板怎么用Nginx upstream模块配置负载均衡分发请求

来源:站长查询作者:上海网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《宝塔面板怎么用Nginx upstream模块配置负载均衡分发请求》,敬请观看详情。把单台Web服务器直接暴露给公网,一旦流量突增就容易出现响应变慢甚至宕机。Nginx的upstream模块能把请求按规则转发到多台后端节点,实现负载分担。在宝塔面板里不需要手写全部配置,通过站点反向代理与配置文件修改就能快速搭建。本文说明如何在宝塔中添加 upstream 块、定义多个 server 节点,以及选择轮询或权重分发策略。同时会提到健康检查缺失时的应对办法,以及后端获取真实IP的设定,帮助运维人员用最少操作完成可用的七层负载均衡。

在多台服务器部署相同Web应用后,如何让外部请求合理分散到各个节点,是运维中常见的现实问题。宝塔面板集成了Nginx管理界面,配合 upstream 模块可以较低门槛实现这一能力。下面先说明基础结构,再给出具体配置过程。

宝塔面板怎么用Nginx upstream模块配置负载均衡分发请求

一、理解 Nginx upstream 的工作方式

Nginx 的 upstream 模块属于上游服务器组定义,它把多个后端地址归为一个逻辑集群。当某个站点或反向代理规则引用这个集群时,Nginx 就会按照设定算法,把客户端请求依次或按权重分配给不同后端。这种方式属于七层(HTTP)负载均衡,能够感知域名、路径等请求特征。

在默认编译的 Nginx 中,upstream 模块通常已内置,不需要额外安装。宝塔面板使用的 Nginx 也包含该模块,我们可以直接在配置文件中声明 upstream 块。需要注意的是,upstream 块必须写在 http 上下文内,而不能放在 server 或 location 中。它的存在让后端扩容变得简单,新增节点只需在列表中加一行 server 配置。

1.1 常见分发算法

最基础的算法是轮询(round robin),每个请求按时间顺序逐一分配到不同后端。若某台机器性能更强,可使用权重(weight)模式,给高配机器分配更大比例流量。此外还有 ip_hash,根据客户端IP做哈希绑定,适合有会话保持需求的场景,但节点变动会导致部分用户重新分布。

下面的表格列出几种方式的差异:

算法配置关键词适用情况
轮询默认不写后端完全同构,无状态服务
权重weight=数字机器配置不均,需按比例分流
IP哈希ip_hash需要会话粘性,如未外接Redis

二、在宝塔面板中添加 upstream 配置

宝塔并没有给 upstream 单独的可视化表单,但我们可以通过修改 Nginx 主配置或站点配置来实现。最稳妥的做法是在宝塔的“软件商店-Nginx-配置修改”中,于 http 段落末尾加入 upstream 定义,这样所有站点都能引用。

假设我们有两台后端,内网地址分别是 192.168.0.10:8080 和 192.168.0.11:8080,希望权重分别为 2 和 1,可以这样写:

http {
    # 其他默认配置省略

    upstream my_backend {
        server 192.168.0.10:8080 weight=2;
        server 192.168.0.11:8080 weight=1;
    }
}

保存后点击“重载配置”,若语法无误即生效。此后在任何站点的反向代理或 location 中,使用 proxy_pass 指向 http://my_backend 即可。注意 upstream 名称不要带下划线以外的特殊符号,避免解析异常。

2.1 在站点中引用集群

进入宝塔对应站点的“设置-反向代理”,添加一条代理,目标URL填写 http://my_backend。若手动编辑站点 conf 文件,则写成如下形式:

server {
    listen 80;
    server_name example.ipipp.com;

    location / {
        proxy_pass http://my_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

其中 X-Real-IP 与 X-Forwarded-For 头部用于让后端拿到真实客户端地址,否则后端日志只会记录 Nginx 机器的IP。对于使用 PHP 的应用,还需要在后端代码或 Web 服务中信任这些头部,否则获取到的仍是代理层地址。

三、健康检查与容错处理

原生 Nginx 免费版的 upstream 不具备主动健康检查,它依赖被动失败计数:当某后端连续出错,会被暂时剔除。我们可以用 max_fails 与 fail_timeout 控制这一行为。

例如下面配置表示在 30 秒内若某节点失败 3 次,则暂停转发该节点 30 秒:

upstream my_backend {
    server 192.168.0.10:8080 weight=2 max_fails=3 fail_timeout=30s;
    server 192.168.0.11:8080 weight=1 max_fails=3 fail_timeout=30s;
}

如果业务对可用性要求极高,可考虑安装宝塔应用商店中的 Nginx 付费版或编译带 health_check 的模块。但在多数内部系统里,被动剔除加上后端进程守护已经足够。另外建议配合监控脚本,在节点完全离线时报警,避免所有流量压到剩余机器。

3.1 获取真实IP的补充设置

当请求经过 Nginx 负载均衡再到后端 Apache 或 Tomcat 时,后端若直接用 <remote_addr> 概念读取,会得到 Nginx 的内网IP。除了上面设置的头部,后端服务也要做对应解析。以 Tomcat 为例,可在 server.xml 的 Valve 中开启 RemoteIpValve,将 X-Forwarded-For 作为真实来源。

这一步常被忽略,导致限流、审计功能失效。因此在负载均衡搭好后,务必抽测后端接收到的客户端地址是否符合预期,而不是仅看页面能否打开。

四、完整示例与验证方法

把前述内容组合,一个最小可用的负载均衡配置如下。我们在宝塔 Nginx 主配置 http 块加入 upstream,在站点配置使用 proxy_pass,并带齐头部。

# 主配置 http 内
upstream app_cluster {
    server 192.168.0.10:8080 weight=2;
    server 192.168.0.11:8080 weight=1;
}

# 站点配置
server {
    listen 80;
    server_name demo.ipipp.com;

    location / {
        proxy_pass http://app_cluster;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 5s;
        proxy_read_timeout 30s;
    }
}

验证时,可分别在两台后端放置显示自身IP或主机名的测试页,然后多次访问域名,观察返回内容是否交替出现。也可使用 curl 批量请求统计分布比例,确认权重生效。若发现始终只打到一台,检查 upstream 名称拼写与 proxy_pass 是否遗漏了 http:// 前缀。

通过宝塔面板配合 Nginx upstream,普通运维人员也能在十分钟内完成基础负载均衡。后续若节点扩容,只要改 upstream 列表并重载,无需中断整体服务。

宝塔面板Nginx_upstream负载均衡修改时间:2026-08-09 00:09:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。