博主最近搭了个图库网站,专门用来存储博客的图片,但是因为性能太差(毕竟白嫖),所以准备使用宝塔网站管理里面的限速和限制功能,如下图
点击设置
,进入网站设置界面,然后按下图点击,我们可以根据自生需要选择,我直接选择的图片站
,里面的数字也可以自己调整,完成后点击保存就生效了。
但这样设置有个问题,我自己上传图片一多,超过连接数限制时就没法上传了,所以我想设置一个白名单,不限制白名单里面的IP,如果各位是变动的IP,可以通过VPS来连接机器,这样就有固定IP了。
首先,我们需要在宝塔首页选择Nginx,然后选择配置修改
,找到http
部分
把以下代码添加在http
部分,我添加在快结尾处
#IP白名单,在里面的不用限连接数
geo $limit {
default 1;
178.253.1.1 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_conn_zone $limit_key zone=bkip:10m;
#白名单结束
我稍微解释下这段代码,详细的自己去看本文末尾的参考文献。
1)geo
指令定义一个白名单$limit
(可以随意命名但不能重复,需要与下方匹配), 默认值为1
, 所有都受限制。 如果客户端IP与白名单列出的IP相匹配,则$limit
值为0
也就是不受limit限制。通常白名单内的IP是你自己的IP、CND IP、负载均衡IP或反向代理IP地址等。
我这里设置的是178.253.1.1
为白名单IP,这个IP是我自己的VPS,如果需要设置成段,可以写成10.252.0.0/24 0;
IP范围是10.252.0.0 ~ 10.252.0.255;多个IP可以写成多行,比如
#IP白名单,在里面的不用限连接数
geo $limit {
default 1;
178.253.1.1 0;
178.253.1.2 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_conn_zone $limit_key zone=bkip:10m;
#白名单结束
2)map
指令是将$limit
值为1
的,也就是受限制的IP,映射为客户端IP,$binary_remote_addr
是指获取客户端IP。将$limit
值为0
的,也就是白名单IP,映射为空的字符串。全部数据存入变量$limit_key
中(可以随意命名但不能重复,需要与下方匹配),也可以理解为受限IP存入其中,因为不受限的IP是空值。
3)limit_conn_zone
指令主要用于限制连接判断,对于$limit_key
中为空值的将会被忽略,从而实现对于列出来的IP不做限制,zone
表示共享内存空间,用作保存每个key对应的连接数,这里我将这个区域命名为bkip
(可以随意命名但不能重复,需要与后面使用处匹配),后面那个10m
是指空间大小,这里是10MB,一个二进制的ip地址在32位机器上占用32个字节,在64位机器上占用63个字节,那么10M可以存放多少呢,计算一下,10x1024x1024/32 = 327680,意思就是可以存放326780个ip地址(32位),64位可以存放163840个ip。
然后我们回到网站的设置中,选择配置文件
,在设置了流量限制
并保存了后,可以在这里找到如下的限制代码
limit_conn perserver 60;
#这个是指服务器总的连接数限制,不能设置白名单
limit_conn perip 8;
#这里是指单个IP的连接数限制
limit_rate 1500k;
#这里是指每个连接数的限速,1500kb/s,不能设置白名单
现在我们修改limit_conn perip 8;
,把perip
改成bkip
,修改完成后如下
limit_conn perserver 60;
limit_conn bkip 8;
limit_rate 1500k;
修改完毕后保存就可以了,但是如果你又去修改流量限制
中的配置,这个地方会被覆盖掉,要再次修改,需要注意。
这样,白名单中的IP就不会被限制连接数了,如不需要的话,可以吧全部修改删除就行了。
参考文献:
https://www.fity.cn/post/608.html
https://chenyongjun.vip/articles/81