实际生产环境中经常会碰到服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,一般都会对同一个ip的连接数,并发数进行限制。
相关语法介绍:
limit_conn_zone
语法: limit_conn_zone $variable zone=name:size;
默认值: none
配置段: http
该指令描述会话状态存储区域。键的状态中保存了当前连接数,键的值可以是特定变量的任何非空值(空值将不会被考虑)。$variable定义键,zone=name定义区域名称,后面的limit_conn指令会用到的。size定义各个键共享内存空间大小。
limit_conn_zone $binary_remote_addr zone=perip:10m;
客户端的IP地址作为键。注意,这里使用的是$binary_remote_addr变量,而不是$remote_addr变量。
$remote_addr变量的长度为7字节到15字节,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
$binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。
找到/usr/local/nginx/conf/nginx.conf(当然指的是一般人都会是这个路径,看装在哪里),一些集成环境也是这个位置。比如军哥LNMP,下面是军哥LNMP中的配置文件信息。
找到54行
#limit_conn_zone $binary_remote_addr zone=perip:10m;
##If enable limit_conn_zone,add “limit_conn perip 10;” to server section.
把 #去掉,后一句注释有提示,添加limit_conn perip 10;
所以修改完后就是
imit_conn_zone $binary_remote_addr zone=perip:10m;limit_conn perip 10;
一般按照默认设置即可,参数根据自身需求更改。