限制并发连接数
因为某特殊需求,要对客户端的连接作出限制,例如某端口的全局并发访问数不能超过2个。根据个人所掌握知识,可以从两方面入手:防火墙和nginx接入层。
防火墙
      iptables的connlimit模块可限制全局的并发连接数。其用法如下:  
iptables -I INPUT -p tcp --syn --dport 8081 -m connlimit --connlimit-above 2 --connlimit-mask 0 -j DROP
命令要点:
-           
-p tcp:针对tcp协议过滤; -           
--dport 8081:对8081端口起作用; -           
-m connlimit:使用connlimit模块 -           
--connlimit-above 2:最多不超过2个并发连接 -           
--connlimit-mask 0: 默认ip掩码是32,即限制单ip并发连接数,设置为0则限制全局连接。 
用上述命令配置好防火墙后,可用以下方法测试效果:
-           
用
nc监听端口:nc -l 8081 -k; -           
打开另外几个终端,测试连接:
nc localhost 8081。 
      正确配置情形下,第一个和第二个nc连接是正常的,第三个连接起会出现broken pipe错误,即无法连接,说明防火墙达到了预期效果(也可以用netstat -nt | grep 8081查看已建立连接)。  
Nginx
      限制速率和并发连接数,Nginx最好用的当属limit_conn模块。对应http和tcp协议,分别有ngx_http_limit_conn_module和ngx_stream_conn_module两个模块,两者配置语法上基本相同,下文以http协议讲述配置。  
      首先我们在http块重创建一个共享存储区limit_conn_zone,指定key和共享内存大小:  
http {      limit_conn_zone $server_name zone=servers:10m;      ....  }    两个注意点:
-           
指定的key值是
$server_name,针对主机域名的并发连接作出限制;如果只是限制单个ip的并发连接数,可用$binary_remote_addr;其他可用的值请参考http://nginx.org/en/docs/http/ngx_http_core_module.html#variables; -           
共享存储区的名称为
servers,大小是10m,可以根据需要更改。 
      接下来我们在server或者location块中限制并发访问数:  
server {      limit_conn servers 2;      ...  }          配置中的servers就是http块中配置的共享存储区名称。  
效果验证请参考”防火墙”一节。
参考
-           
https://serverfault.com/questions/699620/linux-limit-connections-on-a-specific-port
 -           
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
 
原文链接:https://www.qiquanji.com/post/4974.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
微信扫码关注
更新实时通知