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