- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
Nginx 四层代理 stream 模块实战:TCP/UDP 转发与负载均衡优化
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
很多运维只会用 Nginx 做 HTTP 反向代理,但在生产环境里,Nginx 的 stream 模块更适合处理:
· MySQL
· Redis
· MQTT
· TCP 游戏服务
· UDP 服务
甚至可以替代部分 LVS 场景。
确认 Nginx 是否支持 stream:
nginx -V 2>&1 | grep stream
如果存在:
--with-stream
说明已经启用。
最基础 TCP 转发:
stream {
upstream mysql_backend {
server 10.0.0.11:3306;
server 10.0.0.12:3306;
}
server {
listen 3306;
proxy_pass mysql_backend;
}
}
客户端直接连接:
mysql -h nginx-ip -P 3306 -uroot -p
即可通过 Nginx 转发到后端 MySQL。
默认情况下:
stream 使用轮询负载均衡
但数据库场景通常不适合轮询。
更合理的是:
upstream mysql_backend {
hash $remote_addr consistent;
server 10.0.0.11:3306;
server 10.0.0.12:3306;
}
实现:
客户端 IP 固定落到同一后端
避免会话漂移。
Redis 场景更适合:
least_conn;
配置:
upstream redis_backend {
least_conn;
server 10.0.0.21:6379;
server 10.0.0.22:6379;
}
减少热点节点压力。
stream 最大价值之一:
四层代理性能远高于七层 HTTP
因为:
· 不解析 HTTP
· 不处理 Header
· 无复杂规则匹配
CPU 消耗极低。
生产环境必须开启连接复用:
proxy_timeout 10m;
proxy_connect_timeout 5s;
否则高并发下容易:
TIME_WAIT 爆炸
查看连接状态:
ss -ant | grep 3306
重点关注:
ESTAB
TIME_WAIT
CLOSE_WAIT
大量:
TIME_WAIT
通常意味着:
· 短连接过多
· upstream 未复用
· 客户端连接池配置错误
stream 支持健康检查,但开源版功能有限。
企业里常见方案:
keepalived + nginx stream
实现高可用。
例如:
server {
listen 6379;
proxy_pass redis_backend;
proxy_timeout 3s;
proxy_connect_timeout 1s;
}
当 Redis 节点异常:
连接快速失败
避免客户端长时间阻塞。
UDP 转发也支持:
stream {
upstream dns_backend {
server 10.0.0.53:53;
}
server {
listen 53 udp;
proxy_pass dns_backend;
}
}
适用于:
· DNS
· 游戏 UDP 服务
· 语音服务
stream 日志默认不开启。
生产建议:
log_format stream_log '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
access_log /var/log/nginx/stream.log stream_log;
否则出了问题很难排查。
连接数优化:
worker_processes auto;
events {
worker_connections 65535;
}
同时调整系统参数:
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
高并发 TCP 代理场景里:
内核参数比 Nginx 配置更重要
很多人误以为:
Nginx 只能做 Web 服务
实际上:
· 四层代理
· TCP 负载均衡
· UDP 转发
· 数据库入口统一
· Redis 代理
都是 stream 的核心使用场景。
线上经验:
Nginx stream 更适合作为“轻量级四层网关”
尤其在中小规模集群中:
· 配置简单
· 性能稳定
· 运维成本低
比 HAProxy 更容易维护。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP