Примечание: данное руководство предназначено для Ubuntu 14.04.
Redis – это хранилище типа «ключ-значение» с открытым исходным кодом, которое можно использовать как оперативную память или кэш. В сочетании с собственной БД этот сервер хранения данных может работать как сервер баз данных; для большей продуктивности можно настроить другую реляционную СУБД, например, MySQL.
Это руководство покажет, как настроить Redis в качестве кэша для WordPress, что позволит облегчить выполнение трудоемких запросов к базе данных для отображения страницы. В результате сайт WordPress работает намного быстрее, при этом использует меньше ресурсов базы данных и предоставляет настраиваемый кэш.
Результаты выполнения данного руководства таковы:
- Загрузка стандартной страницы WordPress до настройки Redis – 804 миллисекунды;
- Загрузка стандартной страницы WordPress после настройки Redis – 449 миллисекунд.
Внимание: данная реализация кэширования Redis для WordPress зависит от стороннего плагина по имени Redis Object Cache. Чтобы создать собственную реализацию Redis-кэширования для WordPress, придется выполнить немного больше работы согласно данному руководству.
Требования
Для выполнения данного руководства требуется:
- Предварительно настроить сервер Ubuntu 14.04;
- Создать пользователя с привилегиями sudo;
- Установить WordPress.
Redis vs. Memcached: краткий обзор
Memcached – еще одно популярное решение кэширования. Тем не менее, на данный момент Redis обладает гораздо более широким набором функций. На этой странице можно найти краткий обзор Redis, очень полезный для новичков.
Как работает кэширование?
Когда страница WordPress загружается впервые, сервер выполняет запрос к базе данных. Redis кэширует (грубо говоря – запоминает) этот запрос. Когда другой пользователь загружает страницу WordPress, Redis ищет ее в памяти, благодаря чему нет необходимости обращаться к базе данных.
Реализация Redis, использованная в данном руководстве, работает как постоянный кэш объектов для WordPress (без срока действия). Кэш объектов работает путем «запоминания» запросов SQL, необходимых для загрузки страницы WordPress.
При загрузке страницы необходимый SQL-запрос извлекается из памяти Redis; благодаря этому база данных не перегружается дублируемыми запросами. В результате страница загружается значительно быстрее, а влияние сервера на ресурсы базы данных уменьшается. Если поступивший запрос не обнаружен в памяти Redis, он извлекается из базы данных, после чего добавляется в кэш-память Redis.
Если значение для какого-либо запроса, размещенное в БД, было обновлено (например, был добавлен новый пост или страница), значение Redis для этого запроса становится недействительным, чтобы избежать ошибок кэширования.
При возникновении проблем с кэшированием можно удалить кэш Redis с помощью команды flushall, запущенной из командной строки Redis:
redis-cli
flushall
Примечание: официальную документацию WordPress Object Cache можно найти по этой ссылке.
1: Установка Redis
Чтобы Redis мог взаимодействовать с WordPress, понадобятся два пакета:
- redis-server (пакет, содержащий Redis)
- и php5-redis (расширение, необходимое PHP-приложениям, например,WordPress, для взаимодействия с Redis).
Для установки программ запустите:
sudo apt-get install redis-server php5-redis
2: Настройка кэширования Redis
Кроме кэширования Redis может функционировать как хранилище баз данных NoSQL, но этот вопрос выходит за рамки статьи.
Итак, чтобы настроить кэширование Redis, нужно выполнить следующие действия.
Для начала откройте для редактирования /etc/redis/redis.conf:
sudo nano /etc/redis/redis.conf
и внесите в конец файла следующие строки:
maxmemory 256mb
maxmemory-policy allkeys-lru
Затем сохраните и закройте файл.
3: Загрузка скрипта Object Cache
Этот PHP-скрипт был разработан Эриком Манном (англ. Eric Mann) в качестве бэкэнда кэширования объектов для WordPress.
Загрузите скрипт object-cache.php; для этого обратитесь к сайту Github.
Загрузить пакет можно при помощи команды:
wget https://ссылка_на_пакет/object-cache.php
Перейдите в каталог /wp-content установки WordPress:
sudo mv object-cache.php /var/www/html/wp-content/
Примечание: расположение этого каталога может отличаться и зависит от установки WordPress.
4: Включение кэширования (wp-config.php)
Теперь нужно отредактировать файл wp-config.php и внести в него «соль» ключа кэша (key salt) и имя сайта:
nano /var/www/html/wp-config.php
Внесите данную строку в конец раздела Authentication Unique Keys and Salts.
define('WP_CACHE_KEY_SALT', 'example.com');
Например, в качестве «соли» можно использовать доменное имя.
Примечание: пользователи, разместившие несколько сайтов WordPress, могут использовать одну установку Redis при наличии уникальной «соли» ключа кэша.
После строки WP_CACHE_KEY_SALT внесите следующую строку, которая отвечает за постоянное кэширование при помощи ранее установленного плагина Redis Object Cache.
define('WP_CACHE', true);
В результате этот файл будет выглядеть так:
* Authentication Unique Keys and Salts.
. . .
define('NONCE_SALT', 'put your unique phrase here');
define('WP_CACHE_KEY_SALT', 'example.com');
define('WP_CACHE', true);
Сохраните и закройте файл.
5: Перезапуск Redis и Apache
В завершение нужно перезапустить redis-service и apache2.
Чтобы перезапустить Redis:
sudo service redis-server restart
Для перезапуска Apache:
sudo service apache2 restart
При использовании пакета php5-fpm перезапустите его:
sudo service php5-fpm restart
Готово! Теперь сайт WordPress использует кэширование Redis. Проверьте скорость загрузки страницы и использование ресурсов – и вы заметите улучшения.
Мониторинг Redis при помощи redis-cli
Для отслеживания работы Redis используется команда redis-cli:
redis-cli monitor
При запуске этой команды на экране появится результат кэширования запросов Redis в режиме реального времени. Если ничего не появилось, посетите сайт и перезагрузите страницу.
Ниже приведен пример вывода, полученный в результате выполнения данного руководства.
OK
1412273195.815838 "monitor"
1412273198.428472 "EXISTS" "example.comwp_:default:is_blog_installed"
1412273198.428650 "GET" "example.comwp_:default:is_blog_installed"
1412273198.432252 "EXISTS" "example.comwp_:options:notoptions"
1412273198.432443 "GET" "example.comwp_:options:notoptions"
1412273198.432626 "EXISTS" "example.comwp_:options:alloptions"
1412273198.432799 "GET" "example.comwp_:options:alloptions"
1412273198.433572 "EXISTS" "example.comwp_site-options:0:notoptions"
1412273198.433729 "EXISTS" "example.comwp_:options:notoptions"
1412273198.433876 "GET" "example.comwp_:options:notoptions"
1412273198.434018 "EXISTS" "example.comwp_:options:alloptions"
1412273198.434161 "GET" "example.comwp_:options:alloptions"
1412273198.434745 "EXISTS" "example.comwp_:options:notoptions"
1412273198.434921 "GET" "example.comwp_:options:notoptions"
1412273198.435058 "EXISTS" "example.comwp_:options:alloptions"
1412273198.435193 "GET" "example.comwp_:options:alloptions"
1412273198.435737 "EXISTS" "example.comwp_:options:notoptions"
1412273198.435885 "GET" "example.comwp_:options:notoptions"
1412273198.436022 "EXISTS" "example.comwp_:options:alloptions"
1412273198.436157 "GET" "example.comwp_:options:alloptions"
1412273198.438298 "EXISTS" "example.comwp_:options:notoptions"
1412273198.438418 "GET" "example.comwp_:options:notoptions"
1412273198.438598 "EXISTS" "example.comwp_:options:alloptions"
1412273198.438700 "GET" "example.comwp_:options:alloptions"
1412273198.439449 "EXISTS" "example.comwp_:options:notoptions"
1412273198.439560 "GET" "example.comwp_:options:notoptions"
1412273198.439746 "EXISTS" "example.comwp_:options:alloptions"
1412273198.439844 "GET" "example.comwp_:options:alloptions"
1412273198.440764 "EXISTS" "example.comwp_:options:notoptions"
1412273198.440868 "GET" "example.comwp_:options:notoptions"
1412273198.441035 "EXISTS" "example.comwp_:options:alloptions"
1412273198.441149 "GET" "example.comwp_:options:alloptions"
1412273198.441813 "EXISTS" "example.comwp_:options:notoptions"
1412273198.441913 "GET" "example.comwp_:options:notoptions"
1412273198.442023 "EXISTS" "example.comwp_:options:alloptions"
1412273198.442121 "GET" "example.comwp_:options:alloptions"
1412273198.442652 "EXISTS" "example.comwp_:options:notoptions"
1412273198.442773 "GET" "example.comwp_:options:notoptions"
1412273198.442874 "EXISTS" "example.comwp_:options:alloptions"
1412273198.442974 "GET" "example.comwp_:options:alloptions"
Чтобы остановить вывод, нажмите CTRL-C. Эта функция полезна при необходимости просмотреть, какие именно запросы обрабатывает Redis.
Итоги
Итак, теперь сайт WordPress использует кэш Redis на сервере Ubuntu 14.04.
После этого можно проверить сайт WordPress на наличие уязвимых плагинов при помощи WPScan; об этом можно прочесть в этой статье.