1. Nginx代理功能概述
Nginx作为高性能的反向代理服务器,大多数场景下我们主要使用其HTTP代理能力。但很多人不知道的是,从1.9.0版本开始,Nginx就原生支持了TCP/UDP协议的代理功能。这个特性使得Nginx可以成为数据库、游戏服务器、DNS服务等非HTTP协议应用的代理网关。
我在实际生产环境中使用Nginx作为MySQL读写分离的代理层,单台Nginx服务器轻松承载了每秒2万+的数据库查询请求。相比专业的数据库中间件,Nginx的TCP代理配置更加轻量灵活,特别适合中小规模的应用场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. TCP代理配置详解
2.1 基础模块加载
首先需要在编译Nginx时加入--with-stream参数来启用流模块。如果是已安装的Nginx,可以通过nginx -V查看是否包含此模块。如果没有则需要重新编译:
bash复制./configure --with-stream
make && make install
提示:生产环境建议使用
--with-stream_ssl_module同时启用SSL支持,这样后续可以配置加密的TCP代理。
2.2 核心配置结构
TCP代理的配置需要放在stream上下文中,与常规的http上下文同级:
nginx复制# 主配置文件nginx.conf
events {
worker_connections 1024;
}
stream {
server {
listen 3306;
proxy_pass db_backend;
}
upstream db_backend {
server 192.168.1.101:3306 weight=5;
server 192.168.1.102:3306;
}
}
http {
# 常规HTTP配置...
}
这个配置实现了:
- 监听本机3306端口
- 将TCP连接代理到后端两个MySQL服务器
- 第一个后端服务器权重更高
2.3 高级参数调优
对于高并发场景,建议调整以下参数:
nginx复制stream {
proxy_co
