博主最近搭了个图库网站,专门用来存储博客的图片,但是因为性能太差(毕竟白嫖),所以准备使用宝塔网站管理里面的限速和限制功能,如下图

点击设置,进入网站设置界面,然后按下图点击,我们可以根据自生需要选择,我直接选择的图片站,里面的数字也可以自己调整,完成后点击保存就生效了。

但这样设置有个问题,我自己上传图片一多,超过连接数限制时就没法上传了,所以我想设置一个白名单,不限制白名单里面的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

最后修改:2023 年 04 月 10 日
如果觉得我的文章对你有用,请随意赞赏