插件窝 干货文章 在Nginx服务器中怎么配置针对TCP的负载均衡

在Nginx服务器中怎么配置针对TCP的负载均衡

server Nginx 负载 example 639    来源:    2025-04-25

Nginx TCP负载均衡配置指南

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

基本配置方法

  1. 确保Nginx支持TCP负载均衡

    • Nginx 1.9.0及以上版本原生支持TCP负载均衡
    • 对于更早版本,需要使用nginx_tcp_proxy_module第三方模块
  2. 修改nginx.conf主配置文件

# 在main上下文中添加stream模块
stream {
    upstream tcp_backend {
        # 配置后端服务器
        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 tcp_backend; # 转发到上游服务器组
        proxy_timeout 1s; # 超时设置
        proxy_connect_timeout 1s; # 连接超时
    }
}

高级配置选项

  1. 负载均衡算法
upstream tcp_backend {
    # 默认轮询(round-robin)
    # 最少连接数
    least_conn;
    server backend1.example.com:3306;
    server backend2.example.com:3306;
}
  1. 健康检查
upstream tcp_backend {
    server backend1.example.com:3306 max_fails=2 fail_timeout=10s;
    server backend2.example.com:3306 max_fails=2 fail_timeout=10s;
}
  1. SSL/TLS终止
server {
    listen 443 ssl;
    proxy_pass tcp_backend;

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

常见应用场景配置

  1. MySQL负载均衡
stream {
    upstream mysql_servers {
        server db1.example.com:3306;
        server db2.example.com:3306;
    }

    server {
        listen 3306;
        proxy_pass mysql_servers;
        proxy_connect_timeout 1s;
    }
}
  1. Redis负载均衡
stream {
    upstream redis_servers {
        server redis1.example.com:6379;
        server redis2.example.com:6379;
    }

    server {
        listen 6379;
        proxy_pass redis_servers;
    }
}
  1. SSH负载均衡
stream {
    upstream ssh_servers {
        server ssh1.example.com:22;
        server ssh2.example.com:22;
    }

    server {
        listen 2222;
        proxy_pass ssh_servers;
    }
}

注意事项

  1. 性能调优

    • 调整worker_processesworker_connections以适应高并发
    • 考虑启用reuseport选项提高性能
  2. 日志记录

stream {
    log_format tcp_log '$remote_addr [$time_local] '
                     '$protocol $status $bytes_sent $bytes_received '
                     '$session_time';

    access_log /var/log/nginx/tcp-access.log tcp_log;
}
  1. 安全性
    • 使用allow/deny限制访问IP
    • 对于敏感服务考虑配置SSL/TLS加密

配置完成后,使用nginx -t测试配置是否正确,然后nginx -s reload重新加载配置。