OpenResty代理转发UDP、TCP样例详解

前言

nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。这完全就是抢HAproxy份额的节奏,鉴于nginx在7层负载均衡和web service上的成功,和nginx良好的框架,stream模块前景一片光明

用法

stream模块用法和http模块差不多,关键的是语法几乎一致。熟悉http模块配置语法的上手更快 
以下是一个配置了tcp负载均衡和udp(dns)负载均衡的例子, 有 server,upstream块,而且还有server, 
hash, listen, proxy_pass等指令

以下是代理TCP和UDP部分样例

功能点

一 .代理MySql数据库(TCP方式)

1.MySql:由于网络权限问题无法直接访问数据库所在的服务器,可以通过一台两边都能访问的服务器作为反向代理服务器,进行反向代理

如:原数据库地址为-》192.168.26.112:3306

现在192.168.26.160:8100代理以上数据库

stream {
   upstream rtmp {
     server 192.168.26.112:3306;
    }
    server {
        listen    8100;
        proxy_pass  rtmp;
        proxy_timeout 120s;
    }
}

备注:如果配置负责方式可以用权重等方式

server 140.143.11.169:3306 weight=10;

server 182.61.55.179:3306  weight=10;

此时项目数据库直接配置访问 192.168.26.160:8100即可

openresty日志如下:连接和转发接口如下

   
   

二 .代理22端口(TCP方式) 

业务需求:xshell连接代理服务器192.168.26.160:8105,代理目的地为192.168.26.112:22

nginx.conf配置代码如下

stream {
   upstream rtmp {
     server 192.168.26.112:22;
    }
    server {
        listen    8105;
        proxy_pass  rtmp;
        proxy_timeout 120s;
    }
}

验证:需求通过openresty代理某机器的22端口,此时xshell连接代理192.168.26.160:8105即可

代理服务的日志:可以看到转发目标地址是192.168.26.112:22

三 .代理UDP

同样openresty也支持代理UDP协议

配置如下: listen    10002 udp  端口带着udp,这和tcp方式不同之处

stream {
 
   server {
        listen    10002 udp;
        proxy_pass  192.168.26.12:10001;
        proxy_timeout 120s;
   }
}
发布了240 篇原创文章 · 获赞 176 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/zzhuan_1/article/details/97938095