宝塔面板对限制垃圾流量和蜘蛛的一些配置方式

一、症状描述

最近网站被垃圾流量堆满了,经常造成ECS卡死,虽然使用了免费版的ESA还是难以幸免于难。某些遥遥领先的蜘蛛天天爬来爬去,一个流量也不给。

二、解决办法

(1)限速。

第一步,打开宝塔面板,选择“软件商店”,找到Nginx(版本根据您安装的不同而不同),点“设置”,找到配置文件。

在合适的位置输入以下内容。

  # 限流区定义
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;
    # 全站通用限流:单 IP 每秒 5 次请求
    limit_req_zone $binary_remote_addr zone=general_limit:10m rate=5r/s;
    # 后台/登录严格限流:单 IP 每秒 1 次请求
    limit_req_zone $binary_remote_addr zone=wp_login_limit:10m rate=1r/s;
    # Ai:单 IP 每秒5次请求
    limit_req_zone $http_user_agent zone=ai_bots:10m rate=5r/s;
    
    # 把限流状态码改成 429(更语义化,也方便单独拦截)
    limit_req_status  429;
    limit_conn_status 429;

    # 429 指向自定义页面
    error_page 429 /429.html;

注意,这个429.html自己写一个,放到网站目录下(至少本站是),光配置上面还是不得生效。请进入第二步。

配置限速
配置限速

第二步,打开宝塔面板,选择“网站”,找到您的网站,点“设置”,找到配置文件。

输入以下代码

    # 全站通用限流:单 IP 每秒 5 次,允许突发 10 个
    limit_req zone=general_limit burst=10 nodelay;
    # WordPress 登录页限流
    location = /wp-login.php {
        limit_req zone=wp_login_limit burst=3 nodelay;
    }

    # 后台目录限流
    location /wp-admin/ {
        limit_req zone=wp_login_limit burst=5 nodelay;
    }
    # sitemap不限流
    location ~ ^/(sitemap\.xml|robots\.txt)$ {
        try_files $uri =404;
    }

第三步,打开宝塔面板,选择“网站”,找到您的网站,点“设置”,找到伪静态。

以Wordpress为例。改成以下情况

location /
{

	 try_files $uri $uri/ /index.php?$args;
	 limit_req zone=ai_bots burst=5 nodelay;
	 limit_req_status 429; 

}

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

(2)屏蔽垃圾蜘蛛

按照上面第二步的内容后面添加以下代码

 # 不用 xmlrpc 就关掉
   location = /xmlrpc.php {
    deny all;
   }
    # 屏蔽常用垃圾蜘蛛
    if ($http_user_agent ~* "SemrushBot|AhrefsBot|MJ12bot|DotBot|PetalBot|Bytespider|Scrapy|CCBot|python-requests|Wget") {
    return 444;
    }

三、最终效果

最终效果,CPU和负载基本恢复正常,服务器卡死目前未出现,网站的后台之类的也无异常,注意不要限制太死,否则网站的后台容易出问题,也容易误伤,至于参数多少,我这个我个人认为比较符合我的实际需求。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注