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 для отладки.