Ускоряем WordPress с помощью WP Super Cache и Jetpack Photon

Это руководство поможет оптимизировать работу WordPress на веб-сервере Nginx при помощи плагинов WP Super Cache и Jetpack Photon. Это позволит значительно увеличить количество одновременных пользователей на сайте WordPress путём кэширования.

Плагин WP Super Cache кэширует страницы WordPress как статические HTML-страницы, благодаря чему кэшированный контент не нужно обрабатывать PHP-скриптом. Большинство пользователей будет получать страницы из кэша, потому у сервера останется больше вычислительной мощности и он сможет поддерживать большее количество пользователей.

Jetpack Photon – это сервис ускорения загрузки изображений, который кэширует и обслуживает изображения WordPress с помощью собственной сети доставки контента (CDN). Photon является одним из модулей, включенных в плагин Jetpack, который разработан командой Automattic.

Требования

Для выполнения руководства нужно предварительно установить WordPress на веб-сервер Nginx. В се необходимые инструкции можно найти в следующих статьях:

Требования и ограничения плагинов

WP Super Cache не совместим с плагинами, которые используют аргументы запроса. Кроме того, с WP Super Cache нельзя использовать настройки ссылок Default Permalink (поскольку они используют номера страниц WordPress в качестве аргументов).

Требования Jetpack Photon:

  • Нужно подключить сайт к WordPress.com, чтобы подключить Jetpack. Для этого требуется аккаунт WordPress.com.
  • WordPress должен прослушивать порт 80 (Photon не работает на сайтах, принимающих только HTTPS-трафик).
  • После кэширования изображений gif, jpg или png их нельзя обновить. Это поведение можно обойти,  повторно загрузив на сайт переименованный файл.
  • Изображения, загрузка которых занимает много времени (более 10 секунд), должны быть переименованы и повторно загружены на сайт.

Примечание: Если вы не хотите использовать плагин Photon, пропустите этот раздел руководства.

Установка и настройка WP Super Cache

Загрузите WP Super Cache с сайта платформы в домашний каталог:

cd ~; wget http://downloads.wordpress.org/plugin/wp-super-cache.1.4.zip

Установите unzip, если эта утилита не была установлена ранее:

sudo apt-get install unzip

Извлеките пакеты плагина WP Super Cache в каталог plugins (укажите в команде свой путь к каталогу):

cd /var/www/html/wp-content/plugins
unzip ~/wp-super-cache.1.4.zip

Передайте права на плагин следующей группе:

sudo chgrp -R www-data wp-super-cache

Дайте плагину права на запись в каталоге wp-content и файле wp-config.php:

chmod g+w /var/www/html/wp-content
chmod g+w /var/www/html/wp-config.php

Включение WP Super Cache

Войдите на сайт WordPress с правами администратора и откройте панель управления (http://example.com/wp-admin/). Включите плагин WP Super Cache, а затем откройте его окно настроек:

  • Кликните Plugins (слева);
  • Нажмите Activate под WP Super Cache;
  • Нажмите Settings для WP Super Cache.

Включение кэширования

Теперь можно настроить и включить кэширование:

  • Откройте вкладку Advanced ;
  • Поставьте галочук Cache hits to this website for quick access;
  • Выберите Use mod_rewrite to serve cache files.

Теперь WP Super Cache будет кэшировать доступные файлы, а настройки mod_rewrite позволяет серверу Nginx обслуживать кэшированные файлы. На самом деле, модуль mod_rewrite не будет использоваться, поскольку это модуль для Apache, а в данном случае взят сервер Nginx. В дальнейшем нужно будет обновить блок server, чтобы Nginx корректно обслуживал кэшированный контент. Но сначала нужно настроить еще несколько параметров WP Super Cache.

Примечание: Дальнейшие настройки опциональны.

  • Поставьте флажок в Compress pages so they’re served more quickly to visitors.
  • Поставьте галочку Don’t cache pages for known users.
  • Поставьте флажок Cache rebuild и Extra homepage checks.

Сохраните настройки, нажав Update Status.

Теперь плагин WP Super Cache готов к кэшированию страниц WordPress. Далее нужно настроить Nginx для обслуживания этих файлов.

Предупреждения о mod_rewrite и сборке мусора

На данном этапе в верхней части экрана могут появиться предупреждения WP Super Cache. Два из них относятся к правилам mod_rewrite; вот первое из них:

Mod rewrite may not be installed!
It appears that mod_rewrite is not installed. […]

Это предупреждение можно проигнорировать, поскольку вместо Apache будет использоваться Nginx.

Затем появится предупреждение о настройках сборки мусора:

Warning! Garbage collection is not scheduled! […]

В зависимости от потребностей сервера это предупреждение можно пропустить, нажав Dismiss, или настроить сборку мусора. Чтобы настроить сборку мусора, откройте вкладку Advanced, найдите раздел Expiry Time & Garbage Collection и выберите нужные параметры, а затем нажмите кнопку Change Expiration.

Просмотр кэша

Просмотреть список всех кэшированных страниц можно во вкладке Contents в настройках WP Super Cache. В них можно найти раздел Cache stats, который показывает, сколько файлов было кэшировано. Здесь можно также удалить текущий кэш.

WP Super Cache кэширует только страницы, посещённые пользователями, которые не проходили аутентификации, не оставили комментариев и не просмотрели защищенные паролем записи. Так что если страницы, которые вы посещаете, не кэшируются, попробуйте просмотреть сайт WordPress в режиме приватного просмотра. Кроме того, Nginx еще не настроен для поддержки кэша.

Дополнительные настройки WP Super Cache

WP Super Cache предоставляет ещё много полезных настроек. Рассмотрим подробнее вкладки CDN и Preload.

Примечание: Не настраивайте CDN, если вы собираетесь использовать Jetpack Photon.

Чтобы использовать сеть доставки контента, нужно включить её поддержку во вкладке CDN.

Вкладка Preload  позволяет автоматически кэшировать страницы при помощи WP Super Cache. Здесь можно предварительно кэшировать весь сайт или фиксированное количество последних записей за определённый временной интервал.

Примечание: Предварительная загрузка страницы требует некоторых системных ресурсов (CPU, чтобы загрузить страницу, и дисковое пространство для её хранения).

Настройка Nginx для поддержки кэша

Теперь страницы сайта кэшируются при помощи WP Super Cache, но сервер Nginx ещё не поддерживает этих файлов. Откройте блок server сервера Nginx, чтобы исправить это поведение.

sudo vi /etc/nginx/sites-enabled/wordpress

Примечание: Далее предполагается, что WordPress и Nginx были установлены согласно предложенному выше руководству.

Поместите следующие настройки под строкой server_name:

set $cache_uri $request_uri;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $cache_uri 'null cache';
}
if ($query_string != "") {
set $cache_uri 'null cache';
}
# Don't cache uris containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
set $cache_uri 'null cache';
}
# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
set $cache_uri 'null cache';
}
# Use cached or actual file if they exists, otherwise pass request to WordPress
location / {
try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php ;
}

Затем удалите всё после строки location ~ \.php$ {.

Перезапустите Nginx:

sudo service nginx restart

Теперь Nginx может обслуживать кэшируемые плагином WP Super Cache страницы сайта WordPress.

Установка и настройка Jetpack Photon

Загрузите плагин Jetpack в домашний каталог:

cd ~; wget http://downloads.wordpress.org/plugin/jetpack.latest-stable.zip

Распакуйте его в каталог plugins:

cd /var/www/html/wp-content/plugins
unzip ~/jetpack.latest-stable.zip
sudo chgrp -R www-data jetpack

Кроме Photon плагин Jetpack содержит ещё несколько других модулей, многие из которых включены по умолчанию. Если вы хотите использовать остальные модули Jetpack, пропустите дальнейшие настройки и включите модуль Photon в настройках плагина Jetpack (в панели управления WordPress). Если же остальные модули не нужны, отключите их, добавив следующий код в файл плагина.

Откройте wp-config.php в редакторе:

vi /var/www/html/wp-config.php

Перейдите в конец файла и добавьте следующие строки:

function change_default_modules() {
return array( 'photon' );  // activate these modules by default
}
add_filter( 'jetpack_get_default_modules', 'change_default_modules' );
function activate_specific_jetpack_modules( $modules ) {
$active_modules = array( 'photon' );  // enable these modules
$modules = array_intersect_key( $modules, array_flip( $active_modules ) );  // deactivate other modules
return $modules;
}
add_filter( 'jetpack_get_available_modules', 'activate_specific_jetpack_modules' );

Сохранит и закройте файл. Теперь плагин Jetpack активирован, нужно только загрузить модуль Photon и отключить остальные модули.

Откройте панель управления сайтом с правами администратора. Включите Jetpack:

  • Кликните Plugins (слева);
  • Нажмите Activate рядом с Jetpack;
  • Затем нажмите Connect to WordPress.com в сообщении, которое появится в верхней части страницы Plugins.
  • Введите пароль WordPress.com и нажмите Authorize Jetpack.

После этого все изображения сайта (.png, .jpg, .gif) будут обслуживаться системой доставки контента Photon. Это влечёт за собой следующие изменения:

  • Малое потребление пропускной способности (сервер будет использовать меньше исходящей пропускной способности, так как система доставки контента Photon будет обслуживать изображения сайта).
  • Снижение потребления ресурсов (меньший расход CPU и памяти).
  • Увеличение количества одновременных посещений (сервер сможет поддерживать больше пользователей, одновременно зашедших на сайт).

Если модуль Photon не нужен, его можно отключить в Jetpack.

Сравнение производительности

Чтобы продемонстрировать потенциальные преимущества такой настройки, мы настроили два виртуальных выделенных сервера (1 CPU, 1GB RAM); на одном из них был установлен плагин WP Super Cache, а на другом – нет. Для тестирования использовался инструмент Apache JMeter. Несколько пользователей запрашивали 5 страниц WordPress каждые 10 секунд.

Сервер, данные которого не кэшируются, поддерживал 3 одновременных пользователя в секунду, после чего произошёл сбой из-за нехватки CPU.

Кэшируемый сервер мог обслуживать около 50 пользователей одновременно без какого-либо снижения производительности.

Tags: , , , , ,

Добавить комментарий