nginx – 禁止特定User-Agent或者空User-Agent等垃圾爬虫爬取网站、爆破接口
最近一个星期日常对网站进行运维,从一周前开始断断续续开始看到网站的payjs支付接口被调用了很多次,但是都是被调用而没有正常的走完支付流程,所以确定了这是不守规矩的垃圾爬虫,因为网站的robots.txt中已经禁止爬虫对payjs的类似接口进行爬取,百度、google和必应的爬虫都是按照规矩来的,我从网站日志中查了一下
106.54.210.33 - - [11/Sep/2023:08:22:29 +0800] "GET /wp-content/plugins/erphpdown/buy.php?postid=1455×tamp=1693351264 HTTP/1.1" 200 1448 "-" "Apache-HttpClient/4.5.13 (Java/11)"
111.229.16.246 - - [11/Sep/2023:08:22:30 +0800] "GET /wp-content/plugins/erphpdown/payment/payjs.php?ice_post=901&redirect_url=https%3A%2F%2Fwww.stubbornhuang.com%2F901%2F%3Ftimestamp%3D1694353904 HTTP/1.1" 200 1945 "-" "Apache-HttpClient/4.5.13 (Java/11)"
122.51.230.150 - - [11/Sep/2023:08:22:30 +0800] "GET /wp-content/plugins/cp-link-open/link.php?a=aHR0cHM6Ly9kZXZlbG9wZXIubnZpZGlhLmNvbS96aC1jbi90ZW5zb3JydD90ZXJtPVRlbnNvclJU HTTP/1.1" 200 821 "-" "Apache-HttpClient/4.5.13 (Java/11)"
这个垃圾佬应该是挂了个代理ip池,不过都是Apache-HttpClient/4.5.13 (Java/11)
,就只有这种脑残采集爬虫才会无脑遍历网站上的所有链接。既然不遵守robots.txt这种君子协定,那就只能在nginx端进行限制了。nginx可以禁止特定的User-Agent、空User-Agent访问网站。
1 修改nginx配置
如果没有使用宝塔面板,则修改相关的conf文件;如果是使用的宝塔面板,在宝塔面板 - 网站 - 设置 - 配置文件进行修改,如下图
在对应的网站的conf中增加以下配置代码。
1.1 禁止Scrapy等工具的爬取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}
1.2 禁止非GET、HEAD、POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
1.3 禁止指定User-Agent及User-Agent为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
return 403;
}
修改完成之后,如果是宝塔面板保存即可,如果是使用原生nginx则重新加载nginx,比如
/usr/local/nginx/sbin/nginx -s reload
2 测试
对nginx的配置完成之后,我们可以使用curl模拟User-Agent对网站进行访问
(1) 模拟User-Agent为空的爬虫访问
curl -I -A '' www.stubbornhuang.com
输出
HTTP/1.1 403 Forbidden
Server: nginx
Date: Mon, 11 Sep 2023 02:11:30 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive
(2) 模拟Python-urllib的爬虫访问
curl -I -A 'Python-urllib' www.stubbornhuang.com
输出
HTTP/1.1 403 Forbidden
Server: nginx
Date: Mon, 11 Sep 2023 02:13:19 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive
(3) 模拟百度、google等正常蜘蛛访问
curl -I -A 'Baiduspider' www.stubbornhuang.com #百度
curl -I -A 'Googlebot' www.stubbornhuang.com #Google
curl -I -A 'bingbot' www.stubbornhuang.com #必应
输出
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 11 Sep 2023 02:14:27 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: wp-editormd-lang=zh-CN; path=/
Strict-Transport-Security: max-age=31536000
从上述的测试结果看,空的User-Agent或者特定被屏蔽的User-Agent返回的都是403,而百度、google、必应的蜘蛛都是正常访问的,说明设置生效了。
参考
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:nginx – 禁止特定User-Agent或者空User-Agent等垃圾爬虫爬取网站、爆破接口
原文链接:https://www.stubbornhuang.com/2798/
发布于:2023年09月11日 10:19:17
修改于:2023年10月07日 16:13:05
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50