nginx负载均衡配置

75 阅读2分钟

Nginx 提供了多种负载均衡算法,下面为你详细介绍不同负载均衡算法的配置方法。

1. 环境准备

在开始配置之前,确保你已经安装了 Nginx,并且有多个后端服务器可以进行负载均衡。假设你有两个后端服务器:backend1.example.combackend2.example.com,端口均为 80。

2. 基本配置结构

Nginx 的负载均衡配置主要在 http 块中的 upstream 指令中定义后端服务器组,然后在 server 块中使用 proxy_pass 指令将请求转发到该服务器组。以下是基本的配置示例:

http {
    # 定义后端服务器组
    upstream backend {
        # 这里配置负载均衡算法和后端服务器信息
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            # 将请求转发到后端服务器组
            proxy_pass http://backend;
        }
    }
}

3. 不同负载均衡算法配置

轮询(默认算法)

轮询是 Nginx 默认的负载均衡算法,它会按照顺序依次将请求分发到后端服务器。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

加权轮询

加权轮询允许你为每个后端服务器分配不同的权重,权重越高,分配到的请求就越多。

http {
    upstream backend {
        server backend1.example.com weight=3;  # 权重为 3
        server backend2.example.com weight=1;  # 权重为 1
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

IP 哈希(ip_hash

ip_hash 算法会根据客户端的 IP 地址进行哈希计算,将同一客户端的请求始终定向到同一台后端服务器上,实现会话保持。

http {
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

最少连接数(least_conn

least_conn 算法会将请求分发到当前连接数最少的后端服务器上,适用于处理连接数较多的场景。

http {
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

响应时间加权(fair,需要安装第三方模块)

fair 算法会根据后端服务器的响应时间来分配请求,响应时间越短,分配到的请求就越多。该算法需要安装 ngx_http_upstream_fair_module 模块。

http {
    upstream backend {
        fair;
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

4. 配置验证与重载

配置完成后,需要验证配置文件的语法是否正确,并重新加载 Nginx 使配置生效。

# 验证配置文件语法
sudo nginx -t

# 重新加载 Nginx 配置
sudo nginx -s reload

通过以上步骤,你可以根据实际需求选择合适的负载均衡算法进行配置。