Administrator
发布于 2022-08-24 / 358 阅读
0
0

nginx配置端口转发

nginx配置端口转发

nginx在1.9.0版本之后发布了一个新的官方模块ngx_stream_core_module,这个模块不仅能实现TCP和UDP转发还能支持负载均衡upstream配置,由于ngx_stream_core_module模块默认并不会启用,所以我们要使用之前得在编译时添加 “–with-stream” 参数来启用这个模块。

1.TCP端口转发

stream模块最简单的TCP转发配置:

stream{
    
    server{
        listen 443; #如果不指定协议的话默认是TCP协议
        proxy_pass 1.1.1.1:443;
        
        proxy_pass abcd.com:443;  #转发到的目标地址和端口(域名)
        resolver 8.8.8.8;  #定义域名解析服务器的地址,特别是当你使用动态域名作为上游时。
    }
 
}

stream模块sock数据交换接口配置:

stream{
    
    server{
        listen 443; #如果不指定协议的话默认是TCP协议
        proxy_pass unix:/tmp/mysql.sock; #只是举例别乱填
    }
 
}

Stream模块在对TCP协议的转发多种参数配置:

stream{
    
    server{
        listen 443; #如果不指定协议的话默认是TCP协议
        proxy_pass 1.1.1.1:443;
        proxy_connect_timeout 10s; #连接超时时间上限
        proxy_timeout 20s; #在没有数据传输的情况下,多久之后关闭连接
        proxy_buffer_size 512k; #设置用于读取被反代目标的数据缓冲区大小
    }
 
}

stream模块的配置其实跟HTTP模块很类似。但实际上stream模块与http模块上完全是两套不同的处理流程。用最简单的说法就是,HTTP模块是基于Layer7层的应用层处理流程,而Stream仅在Layer4层上对连接进行处理。所以stream模块无法像HTTP模块那样能区分vhost主机名(然而这Stream模块在引入了ssl配置之后又能支持了,这个后面再说。)。在理论上,stream模块的端口转发效率实际上相比HTTP模块的反向代理效率更高。虽然这两个是完全不能同概而论的东西。

stream模块upstream负载均衡配置:

stream{

    upstream mysql_upstreams{
        hash $remote_addr consistent; #负载均衡一致性hash算法
        server 192.168.0.2:3306 weight=1 max_fails=1 fail_timeout=10s; # weight为轮询权重 max_fails最大失败尝试次数
        server 192.168.0.3:3306 weight=1 max_fails=1 fail_timeout=10s; # fail_timeout 失败时间
        server 192.168.0.3:3306 weight=1 max_fails=1 fail_timeout=10s backup; #backup标记为备用服务器
    }
    
    server{
        listen 3306; #如果不指定协议的话默认是TCP协议
        proxy_pass mysql_upstreams;
        proxy_connect_timeout 10s; #连接超时时间上限
        proxy_timeout 20s; #在没有数据传输的情况下,多久之后关闭连接
        proxy_buffer_size 512k; #设置用于读取被反代目标的数据缓冲区大小
    }
 
}

Stream模块的TCP连接设置keepalive来保持长连接配置:

stream{

    upstream mysql_upstreams{
        hash $remote_addr consistent;
        server 192.168.0.2:3306 weight=1 max_fails=1 fail_timeout=10s;
        server 192.168.0.3:3306 weight=1 max_fails=1 fail_timeout=10s;
        server 192.168.0.4:3306 weight=1 max_fails=1 fail_timeout=10s backup;
    }
    
    server{
        listen 3306 so_keepalive=30m::10;
        # listen 3306 so_keepalive=on; 这个是启用keepalive使用默认参数的配置
        # keepalive的可配置参数差不多有以下几个:keepidle,keepintvl,keepcnt
        # keepidle 为连接保持时间,keepintvl 为连接的间隔时间, keepcnt是连接的个数。
        # 所以实际配置的格式为 so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
        proxy_pass mysql_upstreams;
        proxy_connect_timeout 10s;
        proxy_timeout 20s;
        proxy_buffer_size 512k;
    }
 
}

2.UDP端口转发

stream模块最简单的UDP转发配置:

stream{
    
    server{
        listen 53 udp;
        proxy_pass 1.1.1.1:53;
    }
 
}

stream模块upstream负载均衡配置:

stream{

    upstream dns_upstreams{
        server 1.1.1.1:53 weight=1;
        server 1.0.0.1:53 weight=1; # weight 负载均衡权重
        server 8.8.8.8:53 weight=1 backup; #backup标记为备用服务器
    }
    
    server{
        listen 53 udp;
        proxy_pass dns_upstreams;
        proxy_responses 1; # nginx版本1.9.13版本以上支持的参数。UDP协议专用,期望后端返回给客户端数据包的数量
        proxy_timeout 20s; # 超时时间
    }
 
}

参考连接:https://www.vpstry.com/archives/351.html


评论