
Узнайте, как повысить производительность вашего сайта, настроив кэширование HTTP-контента в Apache. Apache поддерживает несколько видов кэширования, включая кэширование по ключу/значению и файловое кэширование. В этом руководстве мы рассмотрим базовое кэширование HTTP-контента, которое является наиболее часто используемой формой кэширования в Apache.
Требования
- Облачный сервер под управлением Linux (Ubuntu 16.04).
- Установленный и запущенный веб-сервер Apache
Состояния кэша Apache
Система HTTP-кэширования Apache рассматривает содержимое как находящееся в одном из трех состояний:
- Свежий: Новое содержимое, которое может быть загружено без проверки.
- Несвежее: Содержимое, срок хранения которого истек в соответствии с установленными вами правилами, и которое необходимо проверить на наличие свежей копии.
- Несуществующий: Содержимое, которое отсутствует.
Когда Apache получает запрос, он проверяет временную метку Time To Live (TTL). Если TTL истекло, Apache повторно проверяет содержимое, чтобы узнать, доступна ли обновленная версия.
- Если обновленная версия доступна: Apache получит это содержимое и будет хранить его до истечения нового TTL.
- Если существующая версия не была обновлена: Apache обновит TTL для файла и продолжит его обслуживание до истечения TTL.
Apache использует модуль mod_cache для оценки TTL содержимого и определения того, что делать при получении запроса. Он использует модуль mod_cache_disk для хранения данных на диске.
Размещение кэша Apache
Перед настройкой HTTP-кэширования необходимо решить, где разместить кэш: перед или за веб-сервером.
CacheQuickHandler — это параметр, который определяет, где будет размещен кэш.
Кэш перед веб-сервером
Если для CacheQuickHandler установлено значение On, кэш будет проверяться перед обращением к Apache.
Это очень быстрый способ обслуживания содержимого, поскольку запросам не нужно ждать, пока Apache завершит запрос. Однако это небезопасно. Поскольку все содержимое сайта размещается перед веб-сервером, аутентификация не происходит.
Это означает, что если у вас есть содержимое, которое требует от пользователей входа в систему или аутентификации, это содержимое будет доступно любому, кто его запросит.
При настройке HTTP-кэширования Apache, пожалуйста, обратите внимание, что CacheQuickHandler включен по умолчанию. Если это вызовет проблемы с безопасностью вашего сайта, вам нужно будет обязательно отключить его.
Кэш за веб-сервером
Если для CacheQuickHandler установлено значение Off, запрос пройдет через Apache, прежде чем будет извлечен из кэша.
Этот метод не так быстр, как размещение кэша перед веб-сервером, поскольку запросы должны обрабатываться через Apache. Однако он позволяет проводить аутентификацию и поэтому лучше всего подходит для любого контента, где пользователь должен войти в систему или пройти аутентификацию, прежде чем получить доступ к контенту.
В данном руководстве мы установим для CacheQuickHandler значение Off.
Включите модули Apache
Чтобы настроить кэширование HTTP, сначала установите пакет apache2-utils:
sudo apt-get update
sudo apt-get install apache2-utils
Включите необходимые модули Apache:
sudo a2enmod cache
sudo a2enmod cache_disk
sudo a2enmod expires
sudo a2enmod headers
Затем перезапустите Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
Добавьте конфигурации виртуальных хостов
Следующая конфигурация приведена в качестве примера. Она является хорошей отправной точкой для базового HTTP-кэша, размещенного за веб-сервером, где содержимое устанавливается на истечение 5 минут после последнего обращения к нему.
Существует множество конфигураций, которые можно добавлять и изменять. Полный список можно найти на сайте Apache.
Кэширование Apache лучше всего настраивать на основе каждого домена. Откройте файл конфигурации Apache для домена с помощью команды:
sudo nano /etc/apache2/sites-available/example.com.conf
Если вы не настроили ни одного виртуального хоста Apache, вы будете редактировать файл конфигурации по умолчанию:
sudo nano /etc/apache2/sites-available/000-default.conf
Прокрутите файл в самый низ и добавьте следующие строки над строкой </VirtualHost>:
CacheQuickHandler off
CacheLock on
CacheLockPath /tmp/mod_cache-lock
CacheLockMaxAge 5
CacheIgnoreHeaders Set-Cookie
<Location />
CacheEnable disk
CacheHeader on
CacheDefaultExpire 800
CacheMaxExpire 64000
CacheIgnoreNoLastMod On
ExpiresActive on
ExpiresDefault A300
</Location>
Сохраните и выйдите из файла. Затем проверьте наличие ошибок конфигурации с помощью команды :
sudo apachectl configtest
Если в файле нет ошибок, перезапустите Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
Проверка HTTP-кэша
Чтобы убедиться, что система кэширования работает, проверьте каталог, в котором хранится кэш. Например, сначала перечислите содержимое каталога кэша:
ls -la /var/cache/apache2/mod_cache_disk/
Если трафик на ваш сервер очень мал, и вы только что настроили кэширование, вы, вероятно, увидите только несколько элементов:
user@localhost:/var/www/html# ls -la /var/cache/apache2/mod_cache_disk/
total 20
drwxr-xr-x 5 www-data www-data 4096 Feb 1 21:43 .
drwxr-xr-x 3 root root 4096 Jan 6 03:20 ..
drwx------ 3 www-data www-data 4096 Feb 1 21:42 2
drwx------ 3 www-data www-data 4096 Feb 1 21:42 T
Просмотрите свой сайт, а затем снова проверьте каталог:
user@localhost:/var/www/html# ls -la /var/cache/apache2/mod_cache_disk/
total 20 drwxr-xr-x 5 www-data www-data 4096 Feb 1 21:45 . drwxr-xr-x 3 root root 4096 Jan 6 03:20 .. drwx—— 3 www-data www-data 4096 Feb 1 21:42 2 drwx—— 3 www-data www-data 4096 Feb 1 21:43 b drwx—— 3 www-data www-data 4096 Feb 1 21:42 T
В приведенном выше примере каталог b был создан в ответ на просмотр одной из страниц сайта. Этот каталог содержит кэш сервера для этой страницы.
Вы также можете проверить кэширование вашего сайта с помощью инструмента, например, доступного на сайте SEO Site Checkup или Seomator.
- Конфигурация