Nginx不仅可以做HTTP负载均衡,还可以配置为TCP/UDP负载均衡器。以下是配置Nginx作为TCP负载均衡器的详细步骤:
确保Nginx版本支持TCP负载均衡(1.9.0及以上版本)
在nginx.conf主配置文件中添加stream模块:
# 主配置文件(nginx.conf)中加入stream模块
stream {
# 包含子配置文件
include /etc/nginx/conf.d/tcp/*.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;
}
upstream backend {
server backend1.example.com:12345;
server backend2.example.com:12345;
# 健康检查配置
health_check interval=10 passes=2 fails=3;
health_check_timeout 5s;
}
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;
}
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;
}
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;
}
upstream redis_servers {
server 10.0.0.1:6379;
server 10.0.0.2:6379;
}
server {
listen 6379;
proxy_pass redis_servers;
}
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会话可能持续较长时间
}
nginx -t
nginx -s reload
ss -tulnp | grep nginx
netstat -tulnp | grep nginx
stream {
# 工作进程数,通常设置为CPU核心数
worker_processes auto;
# 每个工作进程的最大连接数
worker_connections 1024;
# 启用多接受锁
multi_accept on;
}
通过以上配置,Nginx可以高效地作为TCP/UDP负载均衡器使用,适用于数据库、消息队列、自定义协议等各种TCP/UDP服务的负载均衡场景。