插件窝 干货文章 Nginx怎么配置TCP负载均衡

Nginx怎么配置TCP负载均衡

负载 server 配置 Nginx 779    来源:    2025-04-23

Nginx TCP负载均衡配置指南

Nginx不仅可以作为HTTP负载均衡器,还可以配置为TCP/UDP负载均衡器。以下是配置Nginx实现TCP负载均衡的详细步骤:

1. 前提条件

  • Nginx版本1.9.0或更高版本(TCP负载均衡功能在1.9.0引入)
  • 确保编译Nginx时包含了--with-stream模块(默认不包含)

2. 基本配置示例

在nginx.conf文件中添加stream块(与http块同级):

worker_processes auto;

events {
    worker_connections 1024;
}

# TCP/UDP代理和负载均衡配置
stream {
    # 定义上游服务器组
    upstream backend_servers {
        server backend1.example.com:3306 weight=5;
        server backend2.example.com:3306;
        server backend3.example.com:3306 max_fails=3 fail_timeout=30s;
    }

    # 负载均衡服务器配置
    server {
        listen 3306;  # 监听端口
        proxy_pass backend_servers;  # 转发到上游服务器组
        proxy_timeout 3s;
        proxy_connect_timeout 1s;
    }
}

http {
    # 原有的HTTP配置
    ...
}

3. 配置参数详解

上游服务器配置(upstream)

  • server: 定义后端服务器地址和端口
  • weight: 设置权重,数值越大分配请求越多
  • max_fails: 最大失败次数,超过后认为服务器不可用
  • fail_timeout: 服务器被标记为不可用的超时时间
  • backup: 标记为备份服务器,主服务器不可用时启用

服务器配置(server)

  • listen: 监听端口
  • proxy_pass: 指定上游服务器组
  • proxy_timeout: 代理超时时间
  • proxy_connect_timeout: 连接后端服务器的超时时间

4. 高级配置选项

健康检查

upstream backend_servers {
    server backend1.example.com:3306;
    server backend2.example.com:3306;

    # 健康检查配置
    check interval=3000 rise=2 fall=5 timeout=1000;
}

负载均衡算法

upstream backend_servers {
    # 默认是轮询(round-robin)
    # least_conn;  # 最少连接数
    # hash $remote_addr consistent;  # IP哈希

    server backend1.example.com:3306;
    server backend2.example.com:3306;
}

SSL/TLS终止

server {
    listen 443;
    proxy_pass backend_servers;

    ssl on;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

5. 完整示例:MySQL负载均衡

stream {
    upstream mysql_servers {
        least_conn;
        server db1.example.com:3306 weight=3;
        server db2.example.com:3306;
        server db3.example.com:3306 backup;
    }

    server {
        listen 3306;
        proxy_pass mysql_servers;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
    }
}

6. 验证和测试

  1. 检查配置语法:

    nginx -t
    
  2. 重新加载配置:

    nginx -s reload
    
  3. 测试连接:

    telnet your_nginx_server 3306
    # 或使用实际客户端连接
    

7. 注意事项

  • TCP负载均衡需要单独的stream模块,确保编译时包含--with-stream
  • 对于UDP负载均衡,在listen指令后添加udp参数
  • 高并发场景下可能需要调整worker_connectionsworker_processes参数
  • 考虑使用keepalive连接减少连接建立开销

通过以上配置,Nginx可以有效地实现TCP服务的负载均衡,适用于数据库、自定义TCP服务等场景。