插件窝 干货文章 Nginx如何配置Tcp负载均衡

Nginx如何配置Tcp负载均衡

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

Nginx TCP负载均衡配置指南

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

基本配置

  1. 确保Nginx版本支持TCP负载均衡(1.9.0及以上版本)

  2. 在nginx.conf主配置文件中添加stream模块

# 主配置文件(nginx.conf)中加入stream模块
stream {
    # 包含子配置文件
    include /etc/nginx/conf.d/tcp/*.conf;
}
  1. 创建TCP负载均衡配置文件(例如:/etc/nginx/conf.d/tcp/mysql.conf)
upstream mysql_servers {
    # 负载均衡算法,可选:
    # hash $remote_addr consistent; # 一致性哈希
    # least_conn;                  # 最少连接
    # random;                     # 随机

    server 192.168.1.101:3306 weight=5;  # 权重5
    server 192.168.1.102:3306;           # 默认权重1
    server 192.168.1.103:3306 max_fails=3 fail_timeout=30s; # 健康检查
}

server {
    listen 3306;  # 监听端口
    proxy_pass mysql_servers;
    proxy_connect_timeout 1s;  # 连接超时
    proxy_timeout 3s;          # 超时时间

    # 可选:启用代理协议
    # proxy_protocol on;
}

高级配置选项

  1. 健康检查
upstream backend {
    server backend1.example.com:12345;
    server backend2.example.com:12345;

    # 健康检查配置
    health_check interval=10 passes=2 fails=3;
    health_check_timeout 5s;
}
  1. SSL/TLS终止
server {
    listen              443 ssl;
    proxy_pass          backend;
    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/cert.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
}
  1. 日志记录
log_format tcp_log '$remote_addr [$time_local] '
                  '$protocol $status $bytes_sent $bytes_received '
                  '$session_time "$upstream_addr"';

server {
    listen 12345;
    proxy_pass backend;
    access_log /var/log/nginx/tcp-access.log tcp_log;
    error_log  /var/log/nginx/tcp-error.log;
}

常用TCP负载均衡场景配置示例

1. MySQL负载均衡

upstream mysql_cluster {
    zone tcp_mem 64k;
    server db1.example.com:3306;
    server db2.example.com:3306;
    server db3.example.com:3306 backup;  # 备用服务器
}

server {
    listen 3306;
    proxy_pass mysql_cluster;
    proxy_connect_timeout 1s;
}

2. Redis负载均衡

upstream redis_servers {
    server 10.0.0.1:6379;
    server 10.0.0.2:6379;
}

server {
    listen 6379;
    proxy_pass redis_servers;
}

3. SSH负载均衡

upstream ssh_servers {
    server 192.168.1.10:22;
    server 192.168.1.11:22;
}

server {
    listen 2222;
    proxy_pass ssh_servers;
    proxy_timeout 1h;  # SSH会话可能持续较长时间
}

配置验证与维护

  1. 测试配置语法
nginx -t
  1. 重新加载配置
nginx -s reload
  1. 监控TCP连接
ss -tulnp | grep nginx
netstat -tulnp | grep nginx
  1. 性能调优
stream {
    # 工作进程数,通常设置为CPU核心数
    worker_processes auto;

    # 每个工作进程的最大连接数
    worker_connections 1024;

    # 启用多接受锁
    multi_accept on;
}

通过以上配置,Nginx可以高效地作为TCP/UDP负载均衡器使用,适用于数据库、消息队列、自定义协议等各种TCP/UDP服务的负载均衡场景。