Кешування контенту за допомогою модулів Apache
Пропозиція від 8host.com

Що таке веб-кешування?
Веб-кешування — це техніка покращення продуктивності сервера, яка полягає в зберіганні контенту, що часто запитується, в буфері з більш швидким доступом. Усуваючи необхідність повторного вилучення даних, кеш дозволяє користувачам швидше здійснити доступ до контенту.
Ефективні правила кешування контенту дозволяють суттєво заощадити ресурси та покращити обробку динамічного контенту. У цьому посібнику показано, як використовувати модулі кешування Apache.
Примітка : Цей посібник виконано на Apache 2.2. В Apache 2.4 деякі модулі замінені, відповідно, не всі розділи посібника будуть дійсні для Apache 2.4.
Кешування в Apache
Веб-сервер Apache надає безліч методів кешування контенту, що часто запитується, найбільш популярними серед яких є модулі mod_cache і mod_file_cache.
Модуль mod_file_cache
Модуль mod_file_cache - найпростіший з перерахованих вище механізм кешування. Він кешує:
- контент, що часто запитується;
- контент, що рідко змінюється.
Якщо ці дві вимоги виконуються, mod_file_cache буде дуже корисним. Цей модуль працює шляхом виконання певних операцій доступу до файлів, що найчастіше використовуються при запуску сервера.
Модуль mod_cache
Модуль mod_cache надає схеми кешування HTTP. Це означає, що файли будуть кешуватися відповідно до періоду часу, протягом якого сторінка вважається свіжою.
Цей модуль виконує ці операції за допомогою модулів mod_mem_cache або mod_disk_cache. Ці модулі складніші,ніж mod_file_cache, і тому популярніші.
Використання mod_file_cache
Модуль mod_file_cache кешує файли, які практично не змінюються. Методи, які використовується даним модулем, ігнорують будь-які зміни до перезапуску сервера.
Цей механізм кешування можна застосовувати лише для звичайних файлів, він не кешуватиме динамічний контент або файли, створені за допомогою спеціальних обробників контенту.
Модуль працює за допомогою двох директив.
Директива MMapFile
MMapFile - це директива, яка використовується для створення списку файлів, які будуть перенесені на згадку. Це робиться тільки при запуску сервера, тому дуже важливо, щоб під час роботи сервера жодного з перерахованих файлів не було змінено.
Цей тип кешування можна настроїти у конфігураційному файлі сервера. Для цього додайте список файлів, які потрібно кешувати, вказавши файли через пропуск.
MMapFile /var/www/index.html /var/www/otherfile.html var/www/static-image.jpg
При запиті ці файли будуть обслуговуватись із пам'яті.
Примітка : Якщо один із перерахованих файлів було змінено, перезапустіть сервер.
Директива CacheFile
Ця директива відкриває дескриптори перелічених файлів. Вона складає таблицю відкритих дескрипторів і використовує її, щоб скоротити час, необхідний відкривання файла.
Знову ж таки, зміни, внесені у файл під час роботи сервера, не розпізнаються кешем до перезавантаження сервера.
Ця директива дозволяє встановити список файлів для кешування, розділяючи назви файлів пробілами.
CacheFile /this/file.html that/file.html another/file/to/server.html
Ці файли будуть розміщені в кеші під час запуску сервера.
Використання модуля mod_cache
Модуль mod_cache - більш гнучке та продуктивне рішення. Він застосовує кешування HTTP файлів, що найбільш часто запитуються.
На відміну від більшості механізмів кешування, які зберігають точну копію даних до перезавантаження сервера, mod_cache може обробляти контент, що змінюється; для цього можна задати термін дії кешу.
Робота цього модуля заснована на роботі двох інших модулів: mod_disk_cache та mod_mem_cache.
Вони відрізняються місцем зберігання кешу; перший зберігає кеш на диску, другий у пам'яті. Для отримання та зберігання даних використовуються ключі URI.
Примітка : Щоб підвищити продуктивність сервера, використовуйте CNAME (canonical name або канонічне ім'я).
Для цього потрібно внести до конфігурації сервера або віртуального хоста таку директиву:
Налаштування кешування
У розділі розглядаються загальні директиви та його впливом геть функціонування механізмів кешування.
У каталозі /etc/apache2/mods-available можна знайти конфігураційні файли перерахованих вище модулів.
Налаштування mod_mem_cache
Конфігурації mod_mem_cache виглядають так:
sudo nano /etc/apache2/mods-available/mem_cache.conf CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize
Ці директиви читаються тільки якщо модуль mod_mem_cache завантажений. Це можна зробити, запустивши:
sudo a2enmod mem_cache sudo service apache2 restart
Це включить mod_mem_cache та mod_cache.
За допомогою цього рядка Apache створить кеш-пам'ять для контенту, який зберігається в "/" (тобто для всього контенту).
Наступні кілька рядків описують загальний розмір кешу та об'єкти, які зберігатимутьсяв ньому. Оірективи MCacheSize та MCacheMaxOjectCount задають максимальний обсяг кешу: перша – використання пам'яті, друга – максимальна кількість об'єктів.
MCacheSize 4096 MCacheMaxObjectCount 100
Наступні два рядки вказують, які типи даних кешуватимуться щодо використання пам'яті. Стандартні установки кешують об'єкти від 1 байта до 2 кілобайт.
Налаштування mod_disk_cache
Конфігураційний файл mod_disk_cache має такий вигляд:
sudo nano /etc/apache2/mods-available/disk_cache.conf CacheRoot /var/cache/apache2/mod_disk_cache #CacheEnable disk / CacheDirLevels 5 CacheDirLength 3 <15
Ці настройки будуть завантажені, якщо увімкнути модуль mod_disk_cache. Для цього запустіть:
sudo a2enmod disk_cache sudo service apache2 restart
Можна також використовувати цю команду:
CacheRoot /var/cache/apache2/mod_disk_cache #CacheEnable disk /
Директива CacheRoot визначає місцезнаходження кешованого контенту. Директиву CacheEnable disk / за замовчуванням вимкнено. Її потрібно увімкнути на віртуальному хості.
Наступні дві директиви визначають структуру кешування root кешу. Кожен елемент, що кешується, хешується по URL-а, а потім хеш використовується як ім'я файлу і шлях до каталогу.
CacheDirLevels 5 CacheDirLength 3
Директива CacheDirLevel задає кількість каталогів, які потрібно створити з хеш-рядка; CacheDirLength задає кількість символів у імені кожного каталогу.
Наприклад, на сервері є файл з хешем «abcdefghijklmnopqrstuvwxyz», а директиви CacheDirLevel та CacheDirLength мають такі значення:
CacheDirLevel 2 CacheDirLength 4
Тоді такий файл буде зберігатися в:
Кеш, що зберігається на диску, може статизанадто об'ємним, залежно від терміну зберігання файлів. Для скорочення кешу до заданих розмірів Apache використовує інструмент htcacheclean, але, на жаль, це питання виходить за межі цієї статті.
Використання CacheLock
Після закінчення терміну дії кеша на завантаженому сервері можуть виникнути проблеми.
Прострочений кеш оновлюється шляхом отримання даних із вихідного ресурсу. Якщо під час отримання даних на сервер надходить велика кількість запитів, це може призвести до перевантаження та виходу сервера з ладу.
Уникнути подібних ситуацій можна шляхом створення файлу блокування - lock-файлу, який відстежуватиме оновлення кешу і блокуватиме надходження запитів на бек-енд на деякий час.
Такий файл може запобігти повторному кешуванню об'єкта, а також підтримуватиме застарілу версію даних під час оновлення кешу.
CacheLock використовує три директиви: CacheLock [ On Off ] CacheLockMaxAge [time_in_seconds] CacheLockPath [/path/to/lock/directory]
Перша директива включає цю функцію, а третя створює каталог зберігання lock-файлів.
Друга директива, CacheLockMaxAge, визначає максимальний термін дії lock-файлу в секундах, що необхідно у разі виникнення помилки або затримки при оновленні ресурсів.
Висновок
Гнучке кешування Apache дозволяє змінювати рівень складності кешу залежно від потреб сервера. Будь-який з перерахованих вище типів кешування може значно покращити продуктивність сайту, проте перед запуском рекомендується виконати попередню перевірку налаштувань кешу, щоб переконатися, що саме цей метод підходить до вашого сайту.
Крім того, важливо усвідомлювати наслідки неправильно настроєного кешу. ПісляВикористання кешування необхідно переконатися, що кеш не відкриє публічний доступ до конфіденційним данным.
Документація Apache містить чимало порад щодо налаштування кешування.