Кэширование в Nginx

Как настроить кэширование страниц для ускорения сайта и снижения нагрузки.

При высокой посещаемости сайта сервер быстро расходует ресурсы на генерацию страниц. Кэширование в Nginx позволяет отдавать готовые ответы из памяти или диска, ускоряя отклик и разгружая PHP и базу данных.

NGINX может кэшировать:

  • статические файлы (CSS, JS, изображения)
  • динамические страницы (ответы PHP/CMS)
  • ошибки (404, 502 и т.д.)

На VPS и выделенных серверах настройка полностью в ваших руках.

1. Настройка общего кэша (proxy_cache)

Откройте основной конфиг /etc/nginx/nginx.conf и добавьте в секцию http { ... }:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:32m inactive=60m max_size=2g;
  • /var/cache/nginx — папка для хранения кэша (создайте: sudo mkdir -p /var/cache/nginx)
  • levels=1:2 — структура папок (быстрее поиск)
  • keys_zone=static_cache:32m — зона в памяти (32 МБ — имя и метаданные)
  • inactive=60m — файлы удаляются, если к ним не обращались 60 минут
  • max_size=2g — максимальный размер кэша на диске

Создайте папку и установите права:

sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx

2. Простое кэширование всего сайта (proxy_cache)

Создайте или отредактируйте конфиг сайта (например, /etc/nginx/sites-available/site.com). Пример через кэширование всего трафика через прокси:

server {
    listen 80;
    server_name site.com www.site.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # PHP-FPM или backend на другом порту
        proxy_cache static_cache;
        proxy_cache_valid 200 301 302 60m;  # кэшируем успешные ответы на 60 минут
        proxy_cache_valid 404 1m;           # ошибки на 1 минуту
        proxy_cache_methods GET HEAD;       # кэшируем только GET и HEAD
        proxy_ignore_headers Cache-Control Expires Set-Cookie;
        proxy_cache_bypass $http_cookie;    # не кэшируем, если есть куки
    }
}

3. Кэширование fastcgi (ответов PHP)

Для кэширования динамических страниц (например, страниц CMS) используйте fastcgi_cache.
В секции http { ... } добавьте:

fastcgi_cache_path /var/cache/nginx-fcgi levels=1:2 keys_zone=fcgi_cache:100m inactive=60m max_size=5g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;

Создайте папку:

sudo mkdir -p /var/cache/nginx-fcgi
sudo chown www-data:www-data /var/cache/nginx-fcgi

В блоке location ~ \.php$ основного сервера добавьте:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # или ваш сокет
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_cache fcgi_cache;
    fastcgi_cache_valid 200 301 302 60m;  # кэшируем успешные ответы на 60 минут
    fastcgi_cache_valid 404 1m;
    fastcgi_cache_bypass $http_cookie;    # не кэшируем при наличии куки
    fastcgi_no_cache $http_cookie;        # не сохраняем в кэш при наличии куки
}

Полезные замечания

  • Кэширование не должно применяться к страницам с авторизацией, личным кабинетом, корзиной — используйте fastcgi_cache_bypass и fastcgi_no_cache для таких URI.
  • Для динамических сайтов (Bitrix, WordPress) часто кэшируют только GET-запросы без куки.
  • После изменений перезапустите NGINX:
sudo nginx -t   # проверка конфигурации
sudo systemctl reload nginx
  • Очистка кэша вручную (если требуется):
sudo rm -rf /var/cache/nginx/*
sudo rm -rf /var/cache/nginx-fcgi/*

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам
основного сервера добавьте:\r\n```nginx\r\nlocation ~ \\.php$ {\r\n fastcgi_pass unix:/run/php/php8.1-fpm.sock; # или ваш сокет\r\n fastcgi_index index.php;\r\n include fastcgi_params;\r\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\r\n\r\n fastcgi_cache fcgi_cache;\r\n fastcgi_cache_valid 200 301 302 60m; # кэшируем успешные ответы на 60 минут\r\n fastcgi_cache_valid 404 1m;\r\n fastcgi_cache_bypass $http_cookie; # не кэшируем при наличии куки\r\n fastcgi_no_cache $http_cookie; # не сохраняем в кэш при наличии куки\r\n}\r\n```\r\n\r\n### Полезные замечания\r\n- Кэширование не должно применяться к страницам с авторизацией, личным кабинетом, корзиной — используйте `fastcgi_cache_bypass` и `fastcgi_no_cache` для таких URI.\r\n- Для динамических сайтов (Bitrix, WordPress) часто кэшируют только GET-запросы без куки.\r\n- После изменений перезапустите NGINX:\r\n```Bash\r\nsudo nginx -t # проверка конфигурации\r\nsudo systemctl reload nginx\r\n```\r\n\r\n- Очистка кэша вручную (если требуется):\r\n```Bash\r\nsudo rm -rf /var/cache/nginx/*\r\nsudo rm -rf /var/cache/nginx-fcgi/*\r\n```\r\n\r\n!!! info Помощь \r\n Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через [систему тикетов](/my/tickets/) — мы обязательно вам поможем!","images":[],"updated_at":"2026-02-04T17:19:01+03:00","status":"published","type":"article","get_edit_url":"/admin/dream/article/91/change/","children":[]}}},"articleStatus":{"en":{},"ru":{"caching-nginx":200}},"articleBodies":{"en":{},"ru":{"caching-nginx":"

При высокой посещаемости сайта сервер быстро расходует ресурсы на генерацию страниц. Кэширование в Nginx позволяет отдавать готовые ответы из памяти или диска, ускоряя отклик и разгружая PHP и базу данных.

\n

NGINX может кэшировать:

\n\n

На VPS и выделенных серверах настройка полностью в ваших руках.

\n

1. Настройка общего кэша (proxy_cache)

\n

Откройте основной конфиг /etc/nginx/nginx.conf и добавьте в секцию http { ... }:

\n
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:32m inactive=60m max_size=2g;\n
\n\n

Создайте папку и установите права:

\n
sudo mkdir -p /var/cache/nginx\nsudo chown www-data:www-data /var/cache/nginx\n
\n

2. Простое кэширование всего сайта (proxy_cache)

\n

Создайте или отредактируйте конфиг сайта (например, /etc/nginx/sites-available/site.com).\nПример через кэширование всего трафика через прокси:

\n
server {\n    listen 80;\n    server_name site.com www.site.com;\n\n    location / {\n        proxy_pass http://127.0.0.1:8080;  # PHP-FPM или backend на другом порту\n        proxy_cache static_cache;\n        proxy_cache_valid 200 301 302 60m;  # кэшируем успешные ответы на 60 минут\n        proxy_cache_valid 404 1m;           # ошибки на 1 минуту\n        proxy_cache_methods GET HEAD;       # кэшируем только GET и HEAD\n        proxy_ignore_headers Cache-Control Expires Set-Cookie;\n        proxy_cache_bypass $http_cookie;    # не кэшируем, если есть куки\n    }\n}\n
\n

\n
\n

3. Кэширование fastcgi (ответов PHP)

\n

Для кэширования динамических страниц (например, страниц CMS) используйте fastcgi_cache.
\nВ секции http { ... } добавьте:

\n
fastcgi_cache_path /var/cache/nginx-fcgi levels=1:2 keys_zone=fcgi_cache:100m inactive=60m max_size=5g;\nfastcgi_cache_key "$scheme$request_method$host$request_uri";\nfastcgi_cache_use_stale error timeout invalid_header http_500;\n
\n

Создайте папку:

\n
sudo mkdir -p /var/cache/nginx-fcgi\nsudo chown www-data:www-data /var/cache/nginx-fcgi\n
\n

В блоке location ~ \\.php$ основного сервера добавьте:

\n
location ~ \\.php$ {\n    fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # или ваш сокет\n    fastcgi_index index.php;\n    include fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n\n    fastcgi_cache fcgi_cache;\n    fastcgi_cache_valid 200 301 302 60m;  # кэшируем успешные ответы на 60 минут\n    fastcgi_cache_valid 404 1m;\n    fastcgi_cache_bypass $http_cookie;    # не кэшируем при наличии куки\n    fastcgi_no_cache $http_cookie;        # не сохраняем в кэш при наличии куки\n}\n
\n

Полезные замечания

\n\n
sudo nginx -t   # проверка конфигурации\nsudo systemctl reload nginx\n
\n\n
sudo rm -rf /var/cache/nginx/*\nsudo rm -rf /var/cache/nginx-fcgi/*\n
\n
\n

Помощь

\n

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

\n
\n"}},"tagDict":{"ru":[{"id":107,"name":"aaPanel","slug":"aapanel","icon":null},{"id":93,"name":"Партнерская программа","slug":"affiliates","icon":null},{"id":75,"name":"Android","slug":"android","icon":null},{"id":5,"name":"Apache","slug":"apache","icon":null},{"id":82,"name":"Бэкап","slug":"backup","icon":null},{"id":30,"name":"Bash","slug":"bash","icon":null},{"id":1,"name":"Основы","slug":"basics","icon":null},{"id":122,"name":"BeAdmin","slug":"beadmin","icon":null},{"id":57,"name":"Оплата","slug":"billing","icon":"https://fornex.com/media/dream_tag_icon/comments-alt-dollar.svg"},{"id":12,"name":"Bitrix","slug":"bitrix","icon":null},{"id":106,"name":"BrainyCP","slug":"brainy-cp","icon":null},{"id":51,"name":"CentOS","slug":"centos","icon":null},{"id":108,"name":"CloudPanel","slug":"cloudpanel","icon":null},{"id":25,"name":"Кластеризация","slug":"clustering","icon":null},{"id":8,"name":"CMS","slug":"cms","icon":null},{"id":13,"name":"Панель управления","slug":"control-panel","icon":null},{"id":64,"name":"Cpanel","slug":"cpanel","icon":"https://fornex.com/media/dream_tag_icon/cpanel.svg"},{"id":72,"name":"Cron","slug":"cron","icon":null},{"id":3,"name":"Базы данных","slug":"database","icon":null},{"id":50,"name":"Debian","slug":"debian","icon":null},{"id":67,"name":"Dedicated","slug":"dedicated","icon":null},{"id":78,"name":"Выделенный сервер","slug":"dedicated-server","icon":null},{"id":39,"name":"Django","slug":"django","icon":null},{"id":86,"name":"DKIM","slug":"dkim","icon":null},{"id":10,"name":"DLE","slug":"dle","icon":null},{"id":18,"name":"DNS","slug":"dns","icon":null},{"id":104,"name":"Docker","slug":"docker","icon":null},{"id":88,"name":"Домен","slug":"domain","icon":null},{"id":74,"name":"Drupal","slug":"drupal","icon":null},{"id":66,"name":"Email","slug":"email","icon":null},{"id":85,"name":"Ошибки","slug":"errors","icon":null},{"id":65,"name":"FAQ","slug":"faq","icon":null},{"id":63,"name":"FileZilla","slug":"filezilla","icon":null},{"id":102,"name":"Финансы","slug":"finance","icon":null},{"id":21,"name":"Firewall","slug":"firewall","icon":null},{"id":44,"name":"FTP","slug":"ftp","icon":null},{"id":40,"name":"Git","slug":"git","icon":null},{"id":105,"name":"HestiaCP","slug":"hestia-cp","icon":null},{"id":4,"name":"High availability","slug":"high-availability","icon":null},{"id":99,"name":"HTTPD","slug":"httpd","icon":null},{"id":124,"name":"Hysteria 2 VPN","slug":"hysteria-vpn","icon":null},{"id":92,"name":"IKEv2","slug":"ikev2","icon":null},{"id":61,"name":"IOS","slug":"ios","icon":null},{"id":115,"name":"IPMI","slug":"ipmi","icon":null},{"id":116,"name":"IPMIView","slug":"ipmiview","icon":null},{"id":123,"name":"IPsec","slug":"ipsec","icon":null},{"id":47,"name":"ISPmanager","slug":"ispmanager","icon":null},{"id":37,"name":"Java","slug":"java","icon":null},{"id":11,"name":"Joomla","slug":"joomla","icon":null},{"id":7,"name":"LAMP","slug":"lamp","icon":null},{"id":54,"name":"Let's Encrypt","slug":"lets-encrypt","icon":"https://fornex.com/media/dream_tag_icon/lock.svg"},{"id":29,"name":"Linux","slug":"linux","icon":null},{"id":28,"name":"Балансировка","slug":"load-balancing","icon":null},{"id":60,"name":"MacOS","slug":"macos","icon":null},{"id":80,"name":"Администрирование","slug":"management","icon":null},{"id":14,"name":"MongoDB","slug":"mongodb","icon":null},{"id":81,"name":"Мониторинг","slug":"monitoring","icon":null},{"id":117,"name":"Multi-Hop","slug":"multi-hop","icon":null},{"id":2,"name":"MySQL","slug":"mysql","icon":null},{"id":20,"name":"Сеть","slug":"network","icon":null},{"id":100,"name":"Nginx","slug":"nginx","icon":null},{"id":94,"name":"NodeJS","slug":"nodejs","icon":null},{"id":15,"name":"NoSQL","slug":"nosql","icon":null},{"id":84,"name":"OneClickApp","slug":"one-click-app","icon":null},{"id":87,"name":"OpenVPN","slug":"openvpn","icon":null},{"id":90,"name":"Управление заказом","slug":"order-management","icon":"https://fornex.com/media/dream_tag_icon/sliders-v-square.svg"},{"id":110,"name":"Outline VPN","slug":"outline-vpn","icon":null},{"id":98,"name":"PHP","slug":"php","icon":null},{"id":41,"name":"PHP Frameworks","slug":"php-frameworks","icon":null},{"id":52,"name":"PhpMyAdmin","slug":"phpmyadmin","icon":null},{"id":17,"name":"PostgreSQL","slug":"postgresql","icon":null},{"id":125,"name":"Локальная сеть","slug":"private-network","icon":null},{"id":71,"name":"PuTTY","slug":"putty","icon":null},{"id":36,"name":"Python","slug":"python","icon":null},{"id":97,"name":"RDP","slug":"rdp","icon":null},{"id":16,"name":"Redis","slug":"redis","icon":null},{"id":38,"name":"Ruby","slug":"ruby","icon":null},{"id":119,"name":"Хранилище S3","slug":"s3-storage","icon":null},{"id":24,"name":"Безопасность","slug":"security","icon":null},{"id":83,"name":"Софт","slug":"software","icon":null},{"id":95,"name":"SSH","slug":"ssh","icon":null},{"id":53,"name":"SSL","slug":"ssl","icon":null},{"id":79,"name":"Статистика","slug":"statistics","icon":null},{"id":49,"name":"Ubuntu","slug":"ubuntu","icon":null},{"id":46,"name":"Vesta CP","slug":"vesta-cp","icon":null},{"id":76,"name":"Виртуальный хостинг","slug":"virtual-hosting","icon":"https://fornex.com/media/dream_tag_icon/browser.svg"},{"id":77,"name":"Виртуальный сервер","slug":"virtual-server","icon":"https://fornex.com/media/dream_tag_icon/server.svg"},{"id":22,"name":"VPN","slug":"vpn","icon":"https://fornex.com/media/dream_tag_icon/shield-alt.svg"},{"id":55,"name":"VPS","slug":"vps","icon":null},{"id":62,"name":"Windows","slug":"windows","icon":null},{"id":96,"name":"Windows Server","slug":"windows-server","icon":"https://fornex.com/media/dream_tag_icon/windows.svg"},{"id":113,"name":"WireGuard VPN","slug":"wireguard-vpn","icon":null},{"id":9,"name":"WordPress","slug":"wordpress","icon":null},{"id":121,"name":"v2RayTun","slug":"xray-v2raytun-ios","icon":null},{"id":111,"name":"Xray VPN","slug":"xray-vpn","icon":null}]},"articleListByTag":{}},"payment":{"options":{},"checkoutStatus":"idle"}}}