nginx之四层通用代理

nginx做四层通用代理相关配置...

四层代理

ngx_stream_xx_module

具体可以参考官方文档:

https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/#

四层代理内容

  1. tcp
  2. udp
  3. 健康监测
  4. 调度算法
  5. 后端节点属性设置

tcp的redis示例

1,定义stream段,在主配置文件;

stream {
	upstream redisback1 {
		server 192.168.80.102:6379;
		server 192.168.80.103:6379 down;
	}
include stream/*.conf;

}
定义一个redis主机组,同样可以指定,调度算法、权重、主机状态;超时时间,失败尝试次数等;
include导入虚拟主机的配置文件;

2,定义虚拟主机,转发redis请求

[root@host2 conf]# cat stream/redis.conf 
server {
	listen 192.168.80.101:6379;
	proxy_pass redisback1;

}
单独建立文件夹,放四层的代理配置,定义server虚拟主机,
监听的本机地址,转发到哪个四层的主机组;
# udp时,listen要加一个udp的参数表明是udp协议

3,定义2个后端redis服务;

yum install -y redis
vim /etc/redis.conf
	取消bind的注释,改为监听本机所有ip
重启
	
redis-cli 本机连入
config set protected-mode no
取消保护默认,没设置密码,且允许外部ip连接时,redis处于保护模式,需取消才能正常操作;

4,测试

100客户端
101nginx代理
102redis服务器

redis-cli -h 192.168.80.101
在nginx上查看,建立连接的有,101到102真实redis服务器的连接;
即,nginx对客户端100建立一个连接;对后端redis,建立一个连接,一次有效反代,消耗2个连接;

State      Recv-Q Send-Q                       Local Address:Port             Peer Address:Port
ESTAB      0      0                            192.168.80.101:6379         192.168.80.100:39624   
ESTAB      0      0                            192.168.80.101:47232           192.168.80.102:6379                                                

listen指令语法

Syntax:	listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Default:	—
Context:	server


proxy_pass 主机组名称;
proxy_timeout time; 无数据传输时,多久断开,默认10m
proxy_connect_timeout time;nginx和后端服务器尝试建立连接的超时时长;

官方eg:

stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}
updatedupdated2020-10-192020-10-19
加载评论