advanced
Nginx rate limiting и request buffering
Защищайте upstreams через zone-based limits, burst behavior, body size limits, request buffering, slow client handling и timeout alignment.
Rate limiting защищает upstream от abuse и retry storms. `limit_req_zone` и `limit_req` — throttling в стиле leaky-bucket с burst.
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
client_max_body_size 2m;
proxy_request_buffering on;
proxy_read_timeout 60s;
proxy_pass http://node_upstream;
}
}
Request buffering читает всё тело клиента до проксирования — защищает медленные Node parsers от slowloris, но увеличивает память. `proxy_request_buffering off` стримит крупные uploads, если app поддерживает.
На интервью: согласуйте timeouts Nginx и Node; 429 vs 503; per-IP vs per-API-key на gateway.
Типовые ошибки: слишком низкий burst; лимиты тела без явного 413; 502 из-за несогласованных timeouts.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Rate limit на edge для anonymous abuse.
- Явный client_max_body_size.
- Согласованные proxy и app timeouts.
- Логи отклонённых запросов с identity клиента.