nginx的TCP代理限速

使用nginx的四层网络代理达到限制连接数以及限制带宽;使用以下模块
ngx_http_geo_module
ngx_stream_proxy_module
ngx_http_limit_conn_module

点击查看代码
stream {
log_format tcp-proxy '$remote_addr - [$time_local] '           #自定义代理日志格式 tcp-proxy 
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received"  "$upstream_connect_time" '
                 '$remote_addr $remote_port $server_addr $server_port';            
error_log       /var/log/nginx/proxy_error.log;
access_log      /var/log/nginx/proxy_access.log tcp-proxy;   #指定tcp-proxy日志格式输出日志

limit_conn_zone $binary_remote_addr zone=addr:10m;     #binary_remote_addr 是nginx获取客户端IP地址  
limit_conn_log_level  error;                           #定义限制连接日志

geo $binary_remote_addr $slow {                        # $slow非nginx自带的变量,需要根据ngx_http_geo_module模块自带的geo指令来定义$slow变量             
   default 1;                                          # $binary_remote_addr是nginx自带变量,geo指令拿到这个变量对应的IP地址去和下面default或者 192.168.1.2匹配,如果满足$binary_remote_addr = 192.168.1.2,则把$slow变量设置为1,否则使用default的默认值为1。再拿$slow的值去以下map函数里匹配得到$rate,最后再使用到proxy_upload_rate中应用$rate来达到限制速度的要求
   192.168.1.2  0;                                     # 如果满足$binary_remote_addr = 192.168.1.2 则设置$slow为 0
}

map $slow $rate {                                      #根据$slow的值来设置$rate的值,如果$slow的值为1 则$rate的变量值为500k
   1   500k;
   2   2k;
}
    server {
        listen          8888;
        proxy_pass      172.20.16.233:22;
        limit_conn addr 1;
        proxy_upload_rate $rate;                      # 限制上传速度
        proxy_download_rate $rate;                    #限制下载速度
    }

}

参考文献
https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_upload_rate
https://www.cnblogs.com/ltzhang/p/13544562.html

posted @ 2024-06-17 10:55  在半空頫視地球╰☆╮  阅读(20)  评论(0编辑  收藏  举报