rau*_*fer 8 access-control-list blocking http-headers haproxy useragent
我正在尝试使用带有 -f 选项的 haproxy ACL 从文件中读取来拒绝来自特定用户代理的连接(通过匹配用户代理标头的子字符串)。但是它不起作用,它运行时好像忽略了配置。
有更多haproxy经验的人可以指出我缺少什么吗?或者关于如何调试这个 haproxy 配置的一些提示?
我正在运行 haproxy 1.4.18。
这是 haproxy.cfg 的摘录:
listen http 0.0.0.0:80
acl abuser hdr_sub(user-agent) -f /etc/haproxy/abuser.lst
tcp-request content reject if abuser
mode http
server www1 127.0.0.1:8080 maxconn 10000
Run Code Online (Sandbox Code Playgroud)
这是abuser.lst 文件的内容:
# annoying bots
annoyingbot1
annoyingbot2
Run Code Online (Sandbox Code Playgroud)
这个问题很老,但万一其他人遇到这个问题:
您的问题来自于tcp-request content在 HAProxy 有时间接收/读取任何第 7 层数据之前运行的事实。
如何解决这个问题?
简单:添加一个tcp-request inspect-delay:
listen http 0.0.0.0:80
tcp-request inspect delay 15s
acl abuser hdr_sub(user-agent) -f /etc/haproxy/abuser.lst
tcp-request content reject if abuser
mode http
server www1 127.0.0.1:8080 maxconn 10000
Run Code Online (Sandbox Code Playgroud)
以下是 HAProxy 文档中关于此的重要信息:
请注意,在执行内容检查时,haproxy 将评估每个进入的新块的整个规则,并考虑到这些数据是部分数据的事实。如果在上述延迟之前没有规则匹配,则在到期时执行最后一次检查,这次考虑到内容是确定的。如果未设置延迟,haproxy 将根本不会等待,并会立即根据可用信息做出裁决。显然,这不太可能非常有用,甚至可能会很活泼,因此不建议使用此类设置。
| 归档时间: |
|
| 查看次数: |
10449 次 |
| 最近记录: |