1. Nginx作为TCP/UDP代理的实战指南
Nginx从1.9.13版本开始支持原生TCP/UDP代理功能,这个特性彻底改变了传统四层代理的部署方式。作为一名运维工程师,我在生产环境中使用Nginx作为TCP/UDP代理已有五年多时间,处理过数据库代理、游戏服务器转发、日志收集等多种场景。本文将分享最实用的配置方法和避坑经验。
提示:Nginx的stream模块需要单独编译启用,在Ubuntu/Debian系统中可通过
nginx-extras包获取完整功能,CentOS/RHEL则需要手动编译添加--with-stream参数。
1.1 为什么选择Nginx做四层代理?
相比专业的负载均衡器如LVS或HAProxy,Nginx的TCP/UDP代理具有以下优势:
- 配置统一:可与HTTP服务共用配置管理体系
- 动态更新:支持reload不中断服务
- 日志完善:可记录完整的连接信息
- 扩展性强:可结合Lua脚本实现复杂逻辑
但需要注意,Nginx的stream模块不支持HTTP协议特有的功能如header修改、URL重写等。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心配置解析
2.1 基础架构设计
Nginx的TCP/UDP代理配置全部在stream上下文中完成,与http上下文并列。典型结构如下:
nginx复制worker_processes auto;
events {
worker_connections 1024;
}
# HTTP服务配置
http {
...
}
# TCP/UDP代理配置
stream {
upstream backend {
server 10.0.0.1:3306;
}
server {
listen 3306;
proxy_pass backend;
}
}
2.2 关键参数详解
2.2.1 超时控制
nginx复制proxy_connect_timeout 2s; # 连接后端超时
proxy_timeout 10m; # 连接空闲超时
经验值:数据库类长连接建议设置`proxy_t
