手把手教你用Nginx实现TCP/UDP透明代理(附实战演示)
今天咱们来聊一个非常实用的技术点——如何用Nginx搭建TCP/UDP透明代理。这个配置在需要隐藏真实服务器IP或者实现流量转发的场景特别有用,而且配置过程比想象中简单很多!
一、为什么要用透明代理?
先说说我最近遇到的一个真实案例:公司某业务服务器频繁遭到DDoS攻击,直接暴露公网IP风险太大。这时候透明代理就派上用场了——让Nginx作为中间人,客户端根本感知不到真实服务器的存在。
透明代理的三大优势:
- 真实服务器IP隐身术
- 支持灵活的多节点负载均衡
- 可添加额外的安全防护层
二、环境准备
咱们以最常见的场景为例:
- 代理服务器:Ubuntu 20.04(公网IP:1.1.1.1)
- 真实服务器:CentOS 7(内网IP:192.168.1.100)
- 待代理服务:TCP 3306(MySQL)、UDP 1194(OpenVPN)
避坑提示:确保系统已安装Nginx 1.9.0以上版本(需要stream模块支持)
三、实战配置步骤
1. 基础配置三板斧
打开nginx.conf配置文件:
# 主配置段添加
stream {
# TCP代理示例
server {
listen 3306;
proxy_pass 192.168.1.100:3306;
proxy_responses 0; # 关闭响应日志
}
# UDP代理示例
server {
listen 1194 udp reuseport;
proxy_pass 192.168.1.100:1194;
proxy_timeout 3s;
}
}
配置要点解析:
- reuseport参数:UDP必须加!提升多核处理性能
- proxy_timeout:根据业务需求调整超时时间
建议每个server块单独写,避免配置冲突
2. 高级玩法:负载均衡
如果是多台后端服务器,可以这样配置:
upstream mysql_cluster {
server 192.168.1.101:3306 weight=5;
server 192.168.1.102:3306;
server 192.168.1.103:3306 backup;
}
server {
listen 3306;
proxy_pass mysql_cluster;
proxy_connect_timeout 1s;
}
参数说明:
- weight:权重分配
- backup:备用服务器
- least_conn:可选负载策略
四、配置验证四步操作
1、语法检查
nginx -t
2、热重载配置
systemctl reload nginx
3、端口监听检查
ss -tuln | grep -E '3306|1194'
4、实际连接测试(以MySQL为例):
mysql -h 1.1.1.1 -u root -p
五、常见问题排雷指南
Q1:客户端显示的是代理服务器IP怎么办?
A:需要在真实服务器上配置Dummy接口:
ip addr add 1.1.1.1/32 dev lo
Q2:UDP代理丢包严重?
试试这两个优化参数:
proxy_udp_buffer 64k;
proxy_bind $remote_addr transparent;
Q3:如何查看实时流量?
用这个命令监控:
ngxtop -t 5 stream
六、性能调优建议
根据业务规模调整worker配置:
worker_processes auto;
worker_rlimit_nofile 102400;
events {
worker_connections 65535;
multi_accept on;
}
七、安全加固方案
IP白名单控制
allow 192.168.0.0/16;
deny all;
流量限速
proxy_download_rate 512k;
proxy_upload_rate 256k;
配置时记得先从小流量业务开始测试,逐步验证稳定性。
最后提醒:生产环境修改配置前一定要先备份原文件!别问我怎么知道的...(都是血泪教训)