![在 Haproxy 中阻止网站抓取工具](https://linux22.com/image/720649/%E5%9C%A8%20Haproxy%20%E4%B8%AD%E9%98%BB%E6%AD%A2%E7%BD%91%E7%AB%99%E6%8A%93%E5%8F%96%E5%B7%A5%E5%85%B7.png)
我正在使用 Haproxy。我想阻止爬虫程序访问我的网站。在 haproxy.cfg 中,我创建了一条规则。
acl blockedagent hdr_sub(user-agent) -i -f /etc/haproxy/badbots.lst
http-request deny if blockedagent
该文件/etc/haproxy/badbots.lst
包含我想要阻止的用户代理,
^Lynx
^PHP
^Wget
^Nutch
^Java
^curl
^PEAR
^SEOstats
^Python\-urllib
^python\-requests
^HTTP_Request
^HTTP_Request2
例如,它wget
也应该阻止尝试。但是当我使用时wget mysite.com/example/discussion
,它给出了输出。此外,我python scrapy
也尝试了使用。但在这两种情况下,它都给出了输出,它应该阻止尝试。我认为阻止列表不起作用。应该推荐什么方法来做到这一点?
答案1
使用hdr_reg
acl blockedagent hdr_reg(user-agent) -i -f /etc/haproxy/badbots.lst
或者^
从 badbots.lst 中删除
====
$ cat conf
global
debug
defaults
mode http
frontend web
bind *:80
acl blockedagent hdr_reg(user-agent) -i -f badbots.lst1
http-request deny if blockedagent
default_backend asdf
backend asdf
server a 127.0.0.1:8000
$ cat badbots.lst1
^Wget
^curl
$ curl http://127.0.0.1
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
$ wget http://127.0.0.1
--2018-04-16 01:47:51-- http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2018-04-16 01:47:51 ERROR 403: Forbidden.
$ curl http://127.0.0.1 -A "asdf"
HELLO