scgi_cache_use_stale

Директива scgi_cache_use_stale указывает, когда использовать устаревшие данные SCGI-кэша для обслуживания клиентских запросов в определённых ситуациях. — NGINX HTTP Core

scgi_cache_use_stale
httpserverlocation
Синтаксисscgi_cache_use_stale error timeout invalid_header updating;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core
Аргументы1+

Описание

Директива 'scgi_cache_use_stale' управляет поведением NGINX при обслуживании запросов с устаревшими кэшированными данными из SCGI-кэша. Она позволяет задать конкретные сценарии, при которых устаревшие кэшированные ответы будут отправляться клиенту вместо полного запроса свежих данных с бэкенд-сервера. Синтаксис принимает один или несколько параметров, задающих эти условия, например 'error', 'timeout', 'invalid_header' и 'updating'. Включив эту опцию, вы можете улучшить пользовательский опыт, обеспечив возможность выполнения запросов даже если основной источник данных временно недоступен или медленно отвечает. При установке, если происходит одно из указанных условий, NGINX будет отдавать устаревший кэшированный ответ, вместо того чтобы ждать неопределённо долго свежий ответ. Это особенно полезно в приложениях с высокой нагрузкой, где критична доступность, так как помогает смягчить проблемы с задержками, предоставляя клиентам последний известный корректный ответ вместо мгновенной ошибки. Гибкость директивы позволяет выбирать, в каких ситуациях допускается использование устаревших данных, в зависимости от потребностей вашего приложения и допустимого уровня устаревшей информации.

Пример конфига

location /app {
    scgi_pass backend;
    scgi_cache my_cache;
    scgi_cache_use_stale error timeout;    
}

Использование этой директивы без правильной настройки cache может привести к непредвиденным результатам или ошибкам.

Если backend server часто возвращает ошибки, полагаться на stale cache может привести к тому, что пользователям будет выдана устаревшая информация.

Невозможно охватить все сценарии ошибок; убедитесь, что вы определили `error`, `timeout` и т.д., исходя из поведения вашего приложения.