Postat acum 1 zi
nginx
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api_limit burst=20 delay=5;
proxy_pass http://localhost:3000;
}
}
}Nu ai nevoie de servicii fancy pentru rate limiting. Nginx o face gratis și eficient.
Config minimă
În nginx.conf:
Definești zona de rate limit:
- 10 request/sec per IP
- Burst 20, delay
Apoi o aplici pe location /api/ și gata. Boții care hammer-uiesc primesc 503 și pleacă.
Verificare
curl într-un loop. După al 10-lea, începi să primești 503. Exact comportamentul dorit.
Gotcha-uri
- La Cloudflare în față,
$remote_addrvine ca IP Cloudflare. Folosești$http_cf_connecting_ipsau$http_x_forwarded_for. - Rate limit se aplică PER worker. Dacă ai 4 worker-e și setezi 10r/s, efectiv e 40r/s.