前言
ingress
作为目前常用的网关服务,在生产业务中难免会遇到很多爬虫的侵扰,这时候配置一些限流策略就成为一个必要的事情.也能保证生产稳定性,避免服务器资源过多损耗.
限流配置
annotations:
nginx.ingress.kubernetes.io/limit-connection: 10 #单个IP的并发请求数
nginx.ingress.kubernetes.io/limit-rps: 5 #每秒限制单个IP访问次数,突发限制为此乘以突发乘数,默认5
nginx.ingress.kubernetes.io/limit-burst-multiplier: 3 #突发限制速率的倍数
nginx.ingress.kubernetes.io/limit-whitelist: x.x.x.x #限流白名单
当我们配置限流后,用户访问当超过每秒15qps后,
ingress
就会返回503.但是503作为一个服务异常的状态吗,容易影响我们的日志分析结果,所以这里建议将ingress
返回的状态吗修改为429
配置如下
在ingress
的nginx-configuration
文件中添加
limit-req-status-code: '429'
这样限流后返回的就是429,不会影响日志分析结果
配置针对爬虫的user-agent
默认爬虫的user-agent
为python-requests/2.27.1
我们可以在ingress中针对这个user-agent
做限制,返回404
nginx.ingress.kubernetes.io/server-snippet: |-
set $agentflag 0;
if ($http_user_agent ~* "python-requests/2.27.1" ){
set $agentflag 1;
}
if ( $agentflag = 1 ) {
return 404;
}