问题:宝塔面板后台显示服务器负载一直处于100%,CPU也经常 100% ,但是网站前台可以访问,就是很慢。
解决:试了很多种方法,重装服务器系统,改PHP并发性能等都没有解决。
最后在/www/wwwlogs/中查看网站访问日志,发现有大量来自不同浏览器、不同版本的请求,像 Chrome、Edge、Opera、QQBrowser 等等,用户代理很杂乱,猜测可能有大量爬虫模拟真实浏览器访问。
有大量类似这种请求:GET /data:text/javascript;base64,xxxx HTTP/1.1 404
这是利用浏览器地址栏直接请求 data URL 的行为,通常是恶意扫描或者爬虫行为。也说明有爬虫或自动化工具在扫描服务器,可能带来压力。
所以最后在网站配置文件中添加下面代码,解决问题。
# 阻止请求 URI 以 data: 开头
if ($request_uri ~* "^/data:") {
return 403;
}
if ($request_uri ~* "data:text/javascript;base64,") {
return 403;
}
# User-Agent恶意屏蔽,放在server块中,注意:不能放location外有冲突的location /
if ($http_user_agent ~* "(Windows NT 10.0; (Win64|WOW64)).*(Chrome|Edge|QIHU|LBBROWSER|QQBrowser|UBrowser|Core|360SE|360EE|SE 2\.X|MetaSr)") {
return 403;
}
上述代码会屏蔽 Windows 用户,然后偶然发现也会屏蔽正常的 Windows 用户,所以进行了规则优化,不屏蔽 Windows,而是屏蔽更多的套壳国产浏览器
# 阻止请求 URI 以 data: 开头
if ($request_uri ~* "^/data:") {
return 403;
}
if ($request_uri ~* "data:text/javascript;base64,") {
return 403;
}
# ======= 屏蔽国产套壳浏览器 =======
if ($http_user_agent ~* "(QIHU|360SE|360EE|LBBROWSER|MetaSr|UBrowser|QQBrowser|TheWorld|SE 2\.X|Maxthon|Sogou|Liebao|2345Explorer|BIDUBrowser|TaoBrowser|CoolNovo|Quark)") {
return 403;
}
到此,大功告成!