---
title: 'Мікрокешування nginx+apache та нюанси конфігурації | Zomro'
description: 'Ця стаття навчить вас налаштовувати мікрокешування на вашому сайті.'
image: 'https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/09/30/dalle-2024-09-30-100314-a-3d-wireframe-structure-in-vibrant-shades-of-pink-and-purple-with-the-text-nginxapache-in-a-modern-futuristic-font-the-text-should-appear-integ_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/ua/)
  * [Корисні статті](https://zomro.com/ua/blog/articles/)
  * Мікрокешування nginx+apache та нюанси конфігурації 



# Мікрокешування nginx+apache та нюанси конфігурації

30-09-2024

У цій статті ми обговоримо мікрокешування: навіщо воно потрібне, як його налаштувати і які підводні камені можуть зустрітися на шляху.

![Мікрокешування nginx+apache і нюанси конфігурації - 1](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/09/30/dalle-2024-09-30-100314-a-3d-wireframe-structure-in-vibrant-shades-of-pink-and-purple-with-the-text-nginxapache-in-a-modern-futuristic-font-the-text-should-appear-integ_q50.jpg)

## 

## **Що таке мікрокешування?**

Мікрокешування — це тип кешу, який повністю створює файли сторінок і дозволяє замість запиту до бекенд-сервера видавати вже готову сторінку.

Основний мінус такого кешування, звичайно ж, те, що сторінки оновлюються дуже рідко. Але які ж тоді плюси від такого кешування?

Давайте візьмемо ситуацію зі слабким сервером і досить швидким сайтом, але на нього надходить велика кількість запитів від ботів. Вони будуть навантажувати як бекенд, так і базу даних, що призведе до падіння продуктивності сайту, і він буде завантажуватися повільніше. Тут на допомогу приходить мікрокешування: ми просто видаємо вже готові сторінки, не навантажуючи ні бекенд, ні сервер бази даних. Також мікрокешування дозволяє завантажувати сторінки в рази швидше за рахунок того, що не потрібно при кожному запиті чекати відповіді від бекенда.

Такий кеш не підійде для динамічних сайтів і сторінок адмін панелі, але якщо у вас є сторінка, яку оновлюєте, наприклад, раз на день, то це відмінний варіант.

Тепер можна перейти до налаштування мікрокешування.

## **Налаштування мікрокешування**

Для цього нам потрібна директорія, де буде зберігатися наш кеш.

В даній статті буде використовуватися частина ОЗУ як місце на диску, так як це більш ефективно, ніж зберігати такі файли на диску.

Спочатку створимо директорію, де буде зберігатися наш кеш, в нашому випадку `/home/cache`:
    
    
     
    
    
    mkdir /home/cache

Примонтуємо 1 ГБ ОЗУ як місце під файли за допомогою команди:
    
    
     
    
    
    mount -t tmpfs -o size=1G tmpfs  /home/cache

І додамо монтування даного простору при кожному запуску сервера (потрібно додати цю строку в файл `/etc/fstab`):
    
    
     
    
    
    tmpfs /home/cache tmpfs rw,size=1G 0 0

Також встановлюємо безпечні права для директорії:
    
    
     
    
    
    chown www-data:www-data -R /home/cache
    
    
    chmod 700 /home/cache

![Мікрокешування nginx+apache і нюанси конфігурації - 2](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/dmytro.gerasymchuk%40zomro.org/2024/09/30/screenshot_180_q50.jpg)

Готово, ми підготували місце під кеш. Плюсом даного рішення є те, що при перезапуску сервера весь кеш очищається.

Зараз ми займемося потенційними підводними каменями, які можуть заважати роботі з кешем, і через які він не буде працювати, навіть якщо файли кешу будуть створюватися. Перше, що потрібно зробити — налаштувати в PHP параметр **`session.cache_limiter`** на **`public`** , інакше в заголовку сайту буде вказано `Pragma: no-cache`, що не дасть нам використовувати і створювати кеш коректно.

![Мікрокешування nginx+apache і нюанси конфігурації - 3](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/dmytro.gerasymchuk%40zomro.org/2024/09/30/screenshot_184_q50.jpg)

Другий підводний камінь — потрібно додати строку в файл `.htaccess` вашого сайту. Рекомендую встановлювати `max-age` так само, як і інший кеш, щоб кеш не застарів:
    
    
     
    
    
    Header set Cache-Control "max-age=300, public"

![Мікрокешування nginx+apache і нюанси конфігурації - 4](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/dmytro.gerasymchuk%40zomro.org/2024/09/30/screenshot_181_q50.jpg)

Тепер ми можемо бути впевнені, що майже нічого не завадить нам використовувати кеш. Найважливіше залишу наприкінці, а саме налаштування Nginx.

В файлі `/etc/nginx/nginx.conf` потрібно в секцію `http` додати наступні строки:
    
    
     
    
    
    proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
    proxy_cache_valid any 5m;
    proxy_cache_valid 200 5m;
    proxy_cache_valid 404 15s;
    proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
    proxy_cache_lock on;

![Мікрокешування nginx+apache і нюанси конфігурації - 5](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/dmytro.gerasymchuk%40zomro.org/2024/09/30/screenshot_182_q50.jpg)

В файл конфігурації самого сайту в блок `location /` потрібно додати наступні строки: **``**
    
    
    location / {
    proxy_cache global_cache;
    add_header X-Cache-Status $upstream_cache_status;
    proxy_cache_key $host$request_uri;
    proxy_ignore_headers "Set-Cookie";
    proxy_pass http://backend;
    }

![Мікрокешування nginx+apache і нюанси конфігурації - 6](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/dmytro.gerasymchuk%40zomro.org/2024/09/30/screenshot_183_q50.jpg)

Для ISPManager ці дані строки потрібно додавати в блок `location @fallback`, так як всі запити на бекенд йдуть через цей блок.

А тепер поясню, за що відповідає кожна строка, яку ми додали в конфігурації:

  * `proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;`

    * **proxy_cache_path** — шлях, де буде лежати кеш.
    * **levels=1:2** — можна використовувати не більше 3 вкладень (наприклад, 1:2:3). Цифри відповідають за кількість символів у назві директорій кешу, що потрібно для швидкої роботи на повільних дисках. Якщо використовувати тільки `levels=1`, на повільних дисках толку від кешу буде мало, так як буде створюватися велика кількість файлів. Рекомендую використовувати вже готову настройку.
    * **keys_zone=global_cache:100m** — назва зони, до якої будуть звертатися наші сайти. Якщо кеш налаштований на зону `global_cache`, він буде шукати файли саме в директорії `/home/cache`. `100m` — розмір зони імен для кешу.
    * **max_size=1g** — загальний розмір кешу.
    * **inactive=5m** — час, протягом якого кеш вважається активним. Якщо до кешу не звертаються протягом цього часу, система вважає його неактивним і може видалити.
  * `proxy_cache_valid any 5m;` — час, протягом якого буде зберігатися кеш. `any` означає, що всі HTTP-коди, крім окремо вказаних, будуть зберігатися 5 хвилин.

  * `proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;` — дозволяє використовувати застарілий кеш при помилках, вказаних у строкі.

  * `proxy_cache_lock on;` — не дає створювати однакові кеші від кількох запитів одночасно.

  * `proxy_cache global_cache;` — вказує, яку зону кешу буде використовувати сайт.

  * `proxy_cache_key $host$request_uri;` — перевірка статусу кешу. Якщо в заголовку буде `X-Cache-Status: HIT`, то все правильно налаштовано. Якщо `MISS`, то потрібно шукати причини.

  * `proxy_ignore_headers "Set-Cookie";` — дозволяє створювати запит, ігноруючи куки. Без цього кеш не буде показувати `HIT`, так як кожен запит буде унікальним.

  * `proxy_pass http://backend;` — тут потрібно вказати IP і порт бекенд-сервера (наприклад, `localhost:8080`, якщо використовується Apache2 в якості бекенд-сервера).




Перевірити статус кешу можна командою:
    
    
     
    
    
    curl -I http://Ваш_сайт

![Мікрокешування nginx+apache і нюанси конфігурації - 7](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/dmytro.gerasymchuk%40zomro.org/2024/09/30/screenshot_185_q50.jpg)

В відповіді буде заголовок `X-Cache-Status: HIT` (або `MISS`, `BYPASS`). Все, що не `HIT`, — це помилка.

Готово. Ми налаштували мікрокешування на сайті.

*Сайт articlesite.com створений спеціально для статті.

Також пропонуємо розглянути інші корисні статті: 

  * [Як встановити файловий менеджер FileGator на Centos 7. (Apache-Nginx)](https://zomro.com/rus/blog/faq/380-how-to-install-the-filegator-file-manager-on-centos-7-apache-nginx)
  * [Від нуля до героя: створення сервера LEMP на Rocky Linux 9](https://zomro.com/rus/blog/faq/499-from-zero-to-hero-building-a-lemp-server-on-rocky-linux-9)
  * [Корисні лайфхаки для користувачів ispmanager](https://zomro.com/rus/blog/articles/324-helpful-tips-and-hacks-for-ispmanager-users)



Схожі статті

[API - Взаємодія з Image](https://zomro.com/ua/blog/articles/487-api-interaction-with-image) [API - Операція Reboot](https://zomro.com/ua/blog/articles/465-api-operation-reboot) [Як вибрати Forex VPS для стабільних торгів](https://zomro.com/ua/blog/articles/496-how-to-choose-forex-vps-for-stable-trading) [API - Взаємодія з Backup Schedule](https://zomro.com/ua/blog/articles/486-api-interaction-with-backup-schedule) [Інтеграція MySQL з системами моніторингу Zabbix та Grafana](https://zomro.com/ua/blog/articles/579-integration-of-mysql-with-zabbix-and-grafana-monitoring-systems)

[ Сервер з GPU від €174.80/міс ](/dedicated-servers/type=gpu)
