速率限制限制了客户端在时间窗口内可以发出的请求数。您在多个层上应用它,因为每一层看到的东西不同,您用任何标识滥用者的东西来键入它。
429 Too Many Requests和Retry-After,以便客户端礼貌地退避,而不是不断敲击。# Define a shared-memory zone keyed by client IP.
# rate=10r/s = the steady refill rate (token bucket).
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
# burst=20: allow a short spike of 20 queued requests
# nodelay: serve the burst immediately instead of spacing it out
limit_req zone=api burst=20 nodelay;
# Return 429 (not the default 503) so clients see a rate-limit signal
limit_req_status 429;
proxy_pass http://backend;
}
}
这里每个IP以10 requests/second速率补充,最多可以burst到20,任何超过此限制的都会得到429。
速率限制是您对Layer 7泛滥、凭证填充和失控爬虫最便宜、始终启用的防御。对其进行分层(edge用于容量、proxy用于origin、app用于业务逻辑)并正确地对其进行键入可以阻止滥用者,同时真实用户——和合法的bursts——无障碍通过。从真实基线设置限制正是防止它成为您自己造成的中断的原因。
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠