在 nginx 中配置负载均衡,核心做法是先在 http 块中使用 upstream 指令定义一组后端服务器节点,然后在 server 块的 location 指令中通过 proxy_pass 指向该 upstream 的名称。这样当请求进入时,nginx 会根据配置的负载均衡算法将流量分发到具体的后端节点上。

如何定义 upstream 节点组
定义 upstream 节点组需要在 http 上下文中进行,使用 upstream 关键字后跟自定义的名称(如 backend_pool),在花括号内列出所有后端服务器的 IP 和端口。默认情况下,Nginx 使用轮询(Round Robin)算法,即按顺序依次将请求分配给每个节点。如果某个节点不可用,Nginx 会自动将其剔除,直到它恢复健康。这种配置方式简单直接,适用于大多数无状态服务的负载分发场景。

upstream backend_pool {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}上述配置定义了一个名为 backend_pool 的节点组,包含三个后端服务器。Nginx 启动后会初始化这个池,并在后续处理请求时从中选择目标地址。预期结果是三个节点轮流接收请求,若 192.168.1.11 宕机,则仅由另外两个节点分担流量。
如何在 location 中引用 upstream
在 server 块中配置 location 时,只需将 proxy_pass 的值设置为 http:// 加上之前定义的 upstream 名称即可。例如,将所有匹配 /api/ 的请求代理到 backend_pool。这种引用方式解耦了前端入口与后端实现,使得后端节点的增删改查无需修改 location 配置,只需调整 upstream 定义即可生效。这种方式提高了配置的灵活性和可维护性。

server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}该配置片段展示了如何将 /api/ 路径的请求转发至 backend_pool。预期结果是客户端访问 http://example.com/api/test 时,Nginx 会从 backend_pool 中选择一个活跃节点,并将请求转发过去,同时保留原始主机头和真实客户端 IP 信息。
当 upstream 中所有节点都不可用时会发生什么
当 upstream 定义的所有节点均处于不可用状态时,Nginx 将无法建立与后端的连接,此时会向客户端返回 502 Bad Gateway 错误。这是因为 Nginx 作为反向代理,必须依赖至少一个健康的后端节点才能完成请求转发。若所有节点均被标记为故障或主动下线,Nginx 无法执行负载均衡策略,只能终止请求并返回错误码。开发者可通过配置 max_fails 和 fail_timeout 参数来调整节点的健康检查行为,避免频繁切换导致的不稳定现象。


















