NGINX负载均衡配置详解

准备工作

47.112.199.100 #反向代理服务器
47.112.199.101 #真实服务器1
47.112.199.102 #真实服务器2

1.反向代理服务器配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    # 定义后端服务器组
    upstream backend {
        # 默认轮询算法(请求按顺序分配)
        server 47.112.199.101;
        server 47.112.199.102;

        # 也可以使用其他算法,例如:
        # ip_hash;  # IP哈希算法,同一IP请求固定到同一服务器
        # weight=2; # 加权轮询,第一个服务器权重为2,第二个为1
    }

    # 配置反向代理服务器
    server {
        listen 80;
        server_name hyztest.com;  # 可选访问域名

        location / {
            proxy_pass http://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;
            proxy_set_header X-Forwarded-Proto $scheme;

            # 可选:设置超时时间
            proxy_connect_timeout 60s;
            proxy_read_timeout 60s;
            proxy_send_timeout 60s;
        }
    }
}

2.真实服务器配置

两台后端服务器配置一般保持一致


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
server {
        listen 80;
        server_name localhost;
        location / {
                root    /data/www/html;
                index   index.html index.html;
                }
	}
}

3.创建测试页面

在两台后端服务器中,分别创建测试页面

vim /data/www/html/index/html
#节点1
<h1>Server 1: 47.112.199.101</h1>
#节点2
<h1>Server 2: 47.112.199.102</h1>
4.启动NGINX访问测试

在浏览器中输入域名hyztest.com访问,可以看到server1和server2轮询访问

在这里插入图片描述
在这里插入图片描述

5.常用负载均衡算法
① 轮询(默认):默认算法,请求按顺序分配到各服务器
upstream backend {
    server 47.112.199.101;
    server 47.112.199.102;
}
② 加权轮询:适用于服务器性能不均的场景,如新老服务器混用
upstream backend {
    server 47.112.199.101 weight=3;  # 性能较强服务器处理3份请求
    server 47.112.199.102 weight=1; # 性能较弱服务器处理1份请求
}
③ IP哈希:基于客户端IP哈希,同一IP请求固定到同一服务器,适合需要会话保持的场景
upstream backend {
    ip_hash;
    server 47.112.199.101;
    server 47.112.199.102;
}
④ 最少连接:动态选择当前连接数最少的服务器,适合长连接场景(如WebSocket)
upstream backend {
    least_conn;
    server 47.112.199.101;
    server 47.112.199.102;
}
⑤ URL哈希(需要第三方模块):基于请求URL哈希,相同URL的请求分配到同一服务器,适合缓存服务器
upstream backend {
    hash $request_uri consistent;
    server 47.112.199.101;
    server 47.112.199.102;
}
⑥备用服务器:当主服务器全部不可用时,请求才会分配到备用服务器
upstream backend {
    server 47.112.199.101;
    server 47.112.199.102 backup;
}
6.高级负载均衡算法
①加权轮询 + 健康检查
upstream backend {
    server 47.112.199.101 weight=3 max_fails=2 fail_timeout=30s;
    server 47.112.199.102 weight=1 max_fails=2 fail_timeout=30s;
}
②IP哈希+健康检查
upstream backend {
    ip_hash;
    server 47.112.199.101 max_fails=2 fail_timeout=30s;
    server 47.112.199.102 max_fails=2 fail_timeout=30s;
}

参数说明

  • max_fails=2:在fail_timeout时间内,如果请求失败2次,就将该服务器标记为"down"
  • fail_timeout=30s:标记为"down"后,30秒内不再向该服务器发送请求
  • 自动剔除:当服务器宕机时,Nginx会自动停止向该服务器发送请求
    imeout=30s;
    }

> 参数说明
> - `max_fails=2`:在`fail_timeout`时间内,如果请求失败2次,就将该服务器标记为"down"
> - `fail_timeout=30s`:标记为"down"后,30秒内不再向该服务器发送请求
> - **自动剔除**:当服务器宕机时,Nginx会自动停止向该服务器发送请求
> - **自动恢复**:当服务器恢复后,Nginx会继续向其发送请求

更多推荐