advanced

Nginx compression и caching

Применяйте gzip или Brotli, proxy cache keys, validators, bypass rules, stale responses, cache purge strategy и CPU-versus-bandwidth trade-offs.

Включите gzip или Brotli на Nginx для текстовых ответов — часто выгоднее CPU, чем сжатие в Node. Задайте `gzip_types` явно; по умолчанию `application/json` может пропускаться.

Proxy cache хранит ответы upstream по ключу (scheme, host, URI, опционально args). `proxy_cache_bypass` и `proxy_no_cache` для авторизованных маршрутов.

					gzip on;
gzip_types application/json application/javascript text/css;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:10m;

location /api/public/ {
  proxy_cache api;
  proxy_cache_valid 200 5m;
  proxy_cache_key $scheme$host$request_uri;
  add_header X-Cache-Status $upstream_cache_status;
  proxy_pass http://node_upstream;
}
				

`stale` directives отдают кэш при ошибках upstream — задайте допустимый staleness продукта.

На интервью: избегайте двойного сжатия; cache poisoning при неверном `Vary`; стратегия purge после deploy.

Типовые ошибки: кэш ответов с Set-Cookie; игнор `Cache-Control: private`; Brotli на крошечных телах.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Сжатие на edge для JSON/HTML при plain upstream.
  • Ключ proxy cache по значимым вариантам.
  • Bypass для auth и mutation routes.
  • X-Cache-Status для отладки.