![5aac81256256143e25afc685dc4b8f2f.png](https://i-blog.csdnimg.cn/blog_migrate/089c4ec0a5ba24e6791f0fbdba30c427.jpeg)
CentOS7下使用nginx实现TCP和UDP代理
CentOS7下使用nginx实现TCP和UDP代理
nginx从1.9.0版本开始,新增了ngx_stream_core_module模块,使nginx支持四层负载均衡,实现TCP和UDP代理。默认编译的时候该模块并未编译进去,需要编译的时候添加--with-stream,使其支持stream代理
具体可以参考nginx官方文档 http://nginx.org/en/docs/stream/ngx_stream_core_module.html
![ef0da517cdfc0be7affb826daeaacdd0.png](https://i-blog.csdnimg.cn/blog_migrate/fa81561f39bd2108df05473a985827db.jpeg)
下面介绍如何编译安装nginx,并实现tcp/udp代理
1、编译环境准备
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
![040943516a6b51c0a29dea4306f04ede.png](https://i-blog.csdnimg.cn/blog_migrate/400e1620de1bbb90002f11b73af1bf2f.jpeg)
![100c8b90e20d7b06e297958733b4d4c0.png](https://i-blog.csdnimg.cn/blog_migrate/4685b65aad5b2275612a74dca1f809d9.jpeg)
2、下载nginx源码包并进行编译安装
cd /opt
#下载nginx 1.18.0版本源码包
wget http://nginx.org/download/nginx-1.18.0.tar.gz
#解压到/usr/src目录下
tar -zxvf nginx-1.18.0.tar.gz -C /usr/src
#进行环境配置configure
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-stream_realip_module
#make编译安装
make && make install
![0aa0eae8238858d73029316c20a3b91a.png](https://i-blog.csdnimg.cn/blog_migrate/bc99e94999d20d9a41e4c29420ccc455.jpeg)
![0d60f41e80f10eee27ceaeacf04ab75c.png](https://i-blog.csdnimg.cn/blog_migrate/5ea38ee23a58b1214a77c50bf0b3b8fa.jpeg)
3、创建nginx执行程序软链并创建nginx用户与nginx日志目录
#创建nginx执行程序软链
ln -snf /usr/local/nginx/sbin/nginx /usr/local/sbin
#创建nginx用户
useradd -s /sbin/nologin -M nginx
#创建nginx日志目录
mkdir /var/log/nginx
![eac6eaa5721b85f39e0c9c16f67802b9.png](https://i-blog.csdnimg.cn/blog_migrate/52712e3d5132b4cf979a9c426534ad86.jpeg)
4、修改nginx实现TCP代理的配置文件
cd /usr/local/nginx/conf
mv nginx.conf nginx.conf_bak
vi nginx.conf
![3d6625bc8e29d2d44fc6ea4f7f462bac.png](https://i-blog.csdnimg.cn/blog_migrate/6efd9eb20dcb963e0e8b4924065dcc22.jpeg)
配置文件修改成如下内容
worker_processes auto;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
stream {
upstream backend {
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
}
检查nginx.conf语法是否有错误
nginx -t
启动nginx
nginx
验证nginx TCP代理功能是否OK
netstat -anp | grep 12345
tail -f /var/log/nginx/error.log
![3d6625bc8e29d2d44fc6ea4f7f462bac.png](https://i-blog.csdnimg.cn/blog_migrate/6efd9eb20dcb963e0e8b4924065dcc22.jpeg)
SecureCRT直接连接nginx TCP代理服务器192.168.31.10的TCP 12345端口,最终转发到192.168.31.1的TCP 22端口上,从/var/log/nginx/error.log中可以看到 TCP代理OK
![e7517acd0c982e7ed6a031b01cc236f9.png](https://i-blog.csdnimg.cn/blog_migrate/67c29e2c37f79b75b4c5e36cc8479073.jpeg)
5、修改nginx.conf并实现UDP代理
修改上一步中的nginx.conf,修改并增加UDP代理的部分配置
worker_processes auto;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
stream {
upstream tcp_backend {
server 192.168.31.1:22 max_fails=5 fail_timeout=30s;
}
server {
listen 12345;
proxy_connect_timeout 10s;
proxy_timeout 30s;
proxy_pass tcp_backend;
}
upstream udp_backend {
server 192.168.31.51:514;
}
server {
listen 1514 udp;
proxy_pass udp_backend;
}
}
![c08bde2d4f3c1773a0c9a440d92609a3.png](https://i-blog.csdnimg.cn/blog_migrate/482e49045aaa5fd16ee2a9663f679a0d.jpeg)
修改后nginx -s reload重载nginx服务
在一台测试Linux服务器上配置rsyslog 测试Linux服务器的Syslog日志转发到nginx UDP代理服务器192.168.31.10的UDP 1514端口,最终转发到192.168.31.51的UDP 514端口上(用kiwi syslog搭建的一台Windows Syslog日志接收服务器)
echo "*.* @192.168.31.10:1514" >> /etc/rsyslog.conf
systemctl restart rsyslog.service
service sshd restart
触发日志,可以看到udp代理转发OK
![e0cd2c4d0aa19716cadc3c223bd9c236.png](https://i-blog.csdnimg.cn/blog_migrate/e943c204abc9aaf43472c37e5cae6421.jpeg)
![ae7efc3e8ce54d15a34405efe808eeac.png](https://i-blog.csdnimg.cn/blog_migrate/f884a197412c0d82c3a8975cdb3ec1c0.jpeg)
![cdc7f3258e874e4e0f4055858821a613.png](https://i-blog.csdnimg.cn/blog_migrate/0d701f22ab9056439a2dd4dc60ca9ca5.jpeg)