以下是Nginx实现TCP协议代理的配置教程及配置文件样例:
一、配置前提条件
Nginx版本要求:需使用1.9.13及以上版本(支持TCP代理功能)
模块支持:编译时必须包含--with-stream模块(通过nginx -V命令检查输出是否包含该参数)
二、配置文件结构
Nginx的TCP代理配置需在主配置文件nginx.conf的stream块中完成,且stream块需独立于http块之外。
结构示例:
nginx
Copy Code
# 全局配置(影响所有模块)
user nginx;
worker_processes auto;
# stream块配置(TCP/UDP代理专用)
stream {
# 引入子配置文件(推荐模块化管理)
include /etc/nginx/tcp.d/*.conf;
}
三、TCP代理配置样例
场景:将TCP 3306端口的请求转发到后端MySQL服务器
创建子配置文件
在/etc/nginx/tcp.d/目录下新建proxy_mysql.conf文件:
nginx
Copy Code
stream {
upstream mysql_backend {
# 后端服务器列表(支持权重、健康检查)
server 192.168.1.100:3306 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.101:3306;
}
server {
# 监听本地3306端口
listen 3306;
# 开启TCP代理
proxy_pass mysql_backend;
# 连接超时时间
proxy_timeout 60s;
# 启用TCP长连接
proxy_connect_timeout 1s;
}
}
参数说明:
upstream:定义后端服务器集群,支持负载均衡策略(如轮询、加权轮询)。
proxy_pass:指定后端服务器组名称。
max_fails:允许失败次数,配合fail_timeout实现自动剔除故障节点。
proxy_timeout:代理连接的超时时间。
四、操作流程
检查配置文件语法
bash
Copy Code
nginx -t
重新加载配置
bash
Copy Code
systemctl reload nginx
验证端口监听
bash
Copy Code
netstat -tulnp | grep nginx
五、高级配置(可选)
多协议混合配置
nginx
Copy Code
stream {
# TCP协议代理
server {
listen 3306;
proxy_pass backend_mysql;
}
# UDP协议代理
server {
listen 53 udp;
proxy_pass dns_servers;
}
}
日志记录
在stream块中添加:
nginx
Copy Code
log_format tcp_log '$remote_addr [$time_local] $protocol $status';
access_log /var/log/nginx/tcp_access.log tcp_log;
六、常见问题
启动报错server directive not allowed here
原因:stream块被错误嵌套在http块中,需确保两者为同级配置。
连接超时
检查后端服务状态,或调整proxy_connect_timeout参数。
以上配置示例基于Nginx 1.18+环境验证,实际部署时需根据业务需求调整参数。