Nginx不仅可以作为HTTP负载均衡器,还可以配置为TCP/UDP负载均衡器。以下是配置Nginx实现TCP负载均衡的详细步骤:
--with-stream
模块(默认不包含)在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配置
...
}
server
: 定义后端服务器地址和端口weight
: 设置权重,数值越大分配请求越多max_fails
: 最大失败次数,超过后认为服务器不可用fail_timeout
: 服务器被标记为不可用的超时时间backup
: 标记为备份服务器,主服务器不可用时启用listen
: 监听端口proxy_pass
: 指定上游服务器组proxy_timeout
: 代理超时时间proxy_connect_timeout
: 连接后端服务器的超时时间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;
}
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;
}
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;
}
}
检查配置语法:
nginx -t
重新加载配置:
nginx -s reload
测试连接:
telnet your_nginx_server 3306
# 或使用实际客户端连接
--with-stream
udp
参数worker_connections
和worker_processes
参数通过以上配置,Nginx可以有效地实现TCP服务的负载均衡,适用于数据库、自定义TCP服务等场景。