Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
FASTCGI_CACHE_MISS Linux / DevOps

Оптимизация кэширования в Nginx: статический контент и FastCGI-кэш

Обновлено: 21.08.2026
  • Высокая утилизация CPU бэкендом (PHP-FPM, Python, Node.js) при повторяющихся GET-запросах.
  • Медленная отдача статических ассетов (изображения, шрифты, CSS/JS).
  • Падение производительности веб-сервера при наплыве неавторизованных пользователей (эффект Slashdot).

1. Оптимизация отдачи статических файлов

В файле конфигурации хоста:

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform, immutable";
    access_log off;
    log_not_found off;
    tcp_nodelay off;
    open_file_cache max=10000 inactive=120s;
    open_file_cache_valid 180s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

2. Настройка полностраничного FastCGI кэширования

В секции http файла /etc/nginx/nginx.conf:

fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=WORDPRESS_CACHE:100m inactive=60m max_size=2g use_temp_path=off;

3. Конфигурация location для PHP скриптов

# Инициализация зоны кэша
fastcgi_cache WORDPRESS_CACHE;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

# Не кэшировать POST запросы и пользователей с куками авторизации
set $skip_cache 0;
if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
if ($http_cookie ~* "comment_author|wordpress_logged_in") { set $skip_cache 1; }

fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;

fastcgi_cache_valid 200 301 302 30m;
fastcgi_cache_valid 404 1m;

# Отдача устаревшего кэша при сбое бэкенда (Отказоустойчивость)
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;

# Заголовок со статусом кэша (HIT, MISS, BYPASS)
add_header X-FastCGI-Cache $upstream_cache_status;
Практический опыт инженера: Всегда указывайте use_temp_path=off в fastcgi_cache_path. Это заставляет Nginx сразу писать временные файлы в целевую папку кэша без двойного копирования через /var/lib/nginx/tmp/.

Частые вопросы (FAQ)

Что дает fastcgi_cache_use_stale updating?

Если срок жизни кэша истек, Nginx отдаст старую страницу клиентам, пока только один фоновый запрос обновляет кэш с бэкенда. Это предотвращает перегрузку сервера одновременными запросами (Cache Stampede).

Как очистить FastCGI кэш вручную?

Удалите содержимое папки кэша: rm -rf /var/cache/nginx/fastcgi/* && systemctl reload nginx.