Nginx 配置负载均衡(详细版)

本文详细介绍关于Nginx 配置负载均衡,包括配置文件结构、多种负载均衡策略、如何修改均衡策略以及其他一些重要的配置。

本文目录

    • [一、、Nginx 配置负载均衡](#一、、Nginx 配置负载均衡)
      • [1. 配置文件结构](#1. 配置文件结构)
    • [二、Nginx 负载均衡策略](#二、Nginx 负载均衡策略)
      • [1. 轮询(`默认策略`)](#1. 轮询(默认策略))
      • [2. 加权轮询](#2. 加权轮询)
      • [3. IP 哈希](#3. IP 哈希)
      • [4. 最少连接](#4. 最少连接)
    • 三、修改负载均衡策略
    • [四、Nginx 负载均衡其他配置](#四、Nginx 负载均衡其他配置)
      • [1. 健康检查](#1. 健康检查)
      • [2. 会话保持](#2. 会话保持)
      • [3. 超时设置](#3. 超时设置)

一、、Nginx 配置负载均衡

1. 配置文件结构

Nginx 的负载均衡配置主要在 http 块内的 upstream 指令和 server 块内的 proxy_pass 指令中完成。

配置示例如下:

nginx 复制代码
http {
    upstream backend_servers { # 后端服务器组
        server 192.168.1.100:8080;
        server 192.168.1.101:8080;
    }

    server {
        listen 80;
        server_name ecommerce.com;

        location / {
            proxy_pass http://backend_servers; # 将客户端的请求转发到指定的后端服务器组
            proxy_set_header Host $host;
            proxy_set_header X - Real - IP $remote_addr; # 设置请求头信息,确保后端服务器能获取客户端的真实信息。
        }
    }
}

二、Nginx 负载均衡策略

1. 轮询(默认策略)

Nginx 按照顺序依次将请求分发到后端服务器,每个服务器轮流处理请求。例如,第一个请求发送到 192.168.1.100:8080,第二个请求发送到 192.168.1.101:8080,以此类推。

nginx 复制代码
upstream backend_servers {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
}

2. 加权轮询

为每个后端服务器分配一个权重,权重越高的服务器处理的请求越多。在系统中,如果某台服务器的性能较好,可以为其分配较高的权重。

nginx 复制代码
upstream backend_servers {
    server 192.168.1.100:8080 weight=2;
    server 192.168.1.101:8080 weight=1;
}

3. IP 哈希

根据客户端的 IP 地址进行哈希计算,将相同 IP 地址的请求总是发送到同一台后端服务器。这种策略适用于需要保持会话状态的场景,如系统中的用户登录状态。

nginx 复制代码
upstream backend_servers {
    ip_hash;
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
}

4. 最少连接

将请求发送到当前连接数最少的后端服务器,以确保各服务器的负载相对均衡。

nginx 复制代码
upstream backend_servers {
    least_conn;
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
}

三、修改负载均衡策略

如果需要修改负载均衡策略,只需在 upstream 块中修改相应的指令。

将轮询策略改为加权轮询:

nginx 复制代码
upstream backend_servers {
    # 原轮询策略
    # server 192.168.1.100:8080;
    # server 192.168.1.101:8080;

    # 修改为加权轮询策略
    server 192.168.1.100:8080 weight=3;
    server 192.168.1.101:8080 weight=1;
}

修改完成后,需要重新加载 Nginx 配置文件:

bash 复制代码
sudo nginx -s reload

四、Nginx 负载均衡其他配置

1. 健康检查

可以通过 server 指令的 max_fails 和 fail_timeout 参数进行健康检查。当后端服务器在 fail_timeout 时间内出现 max_fails 次失败请求时,Nginx 会认为该服务器不可用,暂时不再向其发送请求。

nginx 复制代码
upstream backend_servers {
    server 192.168.1.100:8080 max_fails=3 fail_timeout=10s;
    server 192.168.1.101:8080 max_fails=3 fail_timeout=10s;
}

2. 会话保持

在需要保持会话状态的系统中,可以使用 sticky 模块实现会话保持。例如,使用 sticky cookie 方式:

nginx 复制代码
upstream backend_servers {
    sticky cookie srv_id expires=1h domain=ecommerce.com path=/;
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
}

3. 超时设置

可以通过 proxy_connect_timeout、proxy_send_timeout 和 proxy_read_timeout 等指令设置连接超时、发送超时和读取超时时间,避免长时间等待无响应的后端服务器。

nginx 复制代码
server {
    listen 80;
    server_name ecommerce.example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_connect_timeout 5s;
        proxy_send_timeout 10s;
        proxy_read_timeout 10s;
    }
}

|---------------------------------------------------------------------------------------------------|--------------------|--------------------------------------------------------------------------------------------------|
| ← 上一篇 MySQL------表添加索引多种方式 | 记得点赞、关注、收藏哦! | 下一篇 JUC小册------公平锁和非公平锁 → |

相关推荐
希和202711 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
一个人旅程~13 小时前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫14 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
派大猩猩_16 小时前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
叼烟扛炮20 小时前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮20 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
Rabitebla21 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
叼烟扛炮1 天前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain
景煜拾年1 天前
InnoAI SQL 助手
运维·数据库·笔记·sql
旖旎夜光1 天前
【C++ 基础入门】类和对象(下):初始化列表、static 成员、友元与内部类
c++·笔记·学习