管理杂谈OA答疑ERP答疑教程搜索

Nginx 负载均衡配置模板:轮询、权重、IP哈希、最少连接


你是不是也遇到过这种情况:

Nginx 的负载均衡功能可以解决这些问题。今天这篇文章,我直接给你 4 种常用算法的配置模板,复制就能用,顺便告诉你什么时候该选哪一种。


一、先看一个最基础的 upstream 模板

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

这个配置使用默认的 轮询(round-robin) 算法,请求会依次发给三台服务器:第一台 → 第二台 → 第三台 → 第一台…

适用场景:服务器性能差不多,且服务是无状态的(比如静态资源、简单的 API)。


二、四种负载均衡算法对比

算法
配置关键词
行为
适用场景
轮询
默认(不写)
轮流分发,平均
服务器性能均衡,无状态服务
权重
weight=3
按比例分发,权重高的多接请求
服务器性能不均,强的多分点活
IP 哈希
ip_hash;
同一客户端 IP 始终打到同一台服务器
需要保持 session(如登录状态)
最少连接
least_conn;
优先分发给当前活动连接数最少的服务器
请求处理时间差异大(如文件上传、慢查询)


三、配置模板(直接复制)

1. 轮询(默认)

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

2. 权重

upstream backend {
    server 192.168.1.10:8080 weight=3;  # 处理 3 倍流量
    server 192.168.1.11:8080 weight=1;
}

3. IP 哈希

upstream backend {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

4. 最少连接

upstream backend {
    least_conn;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

四、健康检查(可选,但推荐)

不加健康检查时,如果某台服务器挂了,Nginx 还是会往它发请求,直到超时。加上 max_fails 和 fail_timeout 可以自动剔除故障节点:

upstream backend {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}

五、一个完整示例(权重 + 健康检查 + 反向代理)

upstream myapp {
    server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 weight=1 max_fails=3 fail_timeout=30s;
}

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

    location / {
        proxy_pass http://myapp;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

六、总结

把这几个模板存下来,下次配负载均衡直接复制改 IP 就行。


阅读原文:https://mp.weixin.qq.com/s/IiZpCOXd4V2yMQuzrs6P1Q


更多精彩文章浏览...
点击右上角图标分享到朋友圈
官方网站:http://www.clicksun.cn
咨询热线:400-186-1886
服务邮箱:service@clicksun.cn