CentOS7下使用nginx实现TCP和UDP代理

Stella981
• 阅读 1204

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

CentOS7下使用nginx实现TCP和UDP代理

下面介绍如何编译安装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

CentOS7下使用nginx实现TCP和UDP代理

CentOS7下使用nginx实现TCP和UDP代理

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
`

CentOS7下使用nginx实现TCP和UDP代理

CentOS7下使用nginx实现TCP和UDP代理

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

CentOS7下使用nginx实现TCP和UDP代理

4、修改nginx实现TCP代理的配置文件

cd /usr/local/nginx/conf mv nginx.conf nginx.conf_bak vi nginx.conf

CentOS7下使用nginx实现TCP和UDP代理

配置文件修改成如下内容

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

CentOS7下使用nginx实现TCP和UDP代理

SecureCRT直接连接nginx TCP代理服务器192.168.31.10的TCP 12345端口,最终转发到192.168.31.1的TCP 22端口上,从/var/log/nginx/error.log中可以看到 TCP代理OK

CentOS7下使用nginx实现TCP和UDP代理

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; } }

CentOS7下使用nginx实现TCP和UDP代理

修改后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 

CentOS7下使用nginx实现TCP和UDP代理

CentOS7下使用nginx实现TCP和UDP代理

CentOS7下使用nginx实现TCP和UDP代理

本文分享自微信公众号 - WalkingCloud(WalkingCloud2018)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
4. Nginx模块
Nginx官方模块1.ngx\_http\_stub\_status\_modulehttp://nginx.org/en/docs/http/ngx\_http\_stub\_status\_module.html。(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这