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 клиента.