Каталог статей
Один сервер, на котором запущено несколько серверов.WordPressВызывает ли использование Memcached веб-сайтом проблемы с перезаписью данных или перекрестными помехами?
В этой статье представлено пошаговое руководство по идеальной изоляции временных и объектных данных кэша на разных сайтах путем настройки отдельного префикса кэша (WP_CACHE_KEY_SALT) и скриптов объектного кэша.
100% исключает конфликты данных, позволяя нескольким площадкам одновременно пользоваться преимуществами ускорения на уровне памяти, и включает в себя советы по безопасности для предотвращения проблем в производственных средах!
Несколько дней назад друг спросил меня о своих трёх сайтах на WordPress, работающих на его сервере. Он хотел настроить Memcached для ускорения их работы, но опасался, что данные могут быть повреждены.
В тот момент я рассмеялся, потому что сам попал в эту ловушку.

Честно говоря, Memcached невероятно легко настроить для одного сайта, но становится интересно, когда речь идёт о сосуществовании нескольких сайтов. Почему?
По умолчанию Memcached помещает все временные и объектные кэши веб-сайтов в один пул. Представьте, что веб-сайты A и B используют один и тот же ключ кэша — это вызовет хаос. Данные A напрямую перезапишут данные B, и два веб-сайта начнут «вмешиваться» в данные друг друга.
То, с чем я столкнулся, было еще смешнее, во-первых.поставщик электроэнергииНа странице с подробным описанием товара на сайте отображался контент из другого блога. Я был ошеломлен и подумал: «Что это такое???»
Мне потребовалась целая ночь, чтобы разобраться; оказалось, что это был конфликт ключей кэша.
Сегодня я поделюсь своим методом настройки в надежде, что он поможет друзьям с похожими потребностями. Я сам ещё изучаю его, и некоторые мои идеи могут быть ещё не до конца разработаны, но этот метод отлично работает для меня.
Подготовка серверной среды
Прежде чем приступить к настройке WordPress, необходимо убедиться, что на сервере установлены служба Memcached и расширение PHP Memcached.
Как установить Memcached в HestiaCP?
Взяв в качестве примера Ubuntu, можно сказать, что для этого достаточно всего трёх строк команд.
sudo apt update
sudo apt install memcached php-memcached
sudo systemctl restart php8.x-fpm # 根据你的 PHP 版本改После установки не забудьте проверить, запущена ли служба Memcached.
sudo systemctl status memcachedЕсли вы видите "active (running)", это значит, что проблем нет.
Обратите внимание, что названия пакетов могут отличаться в разных системах. Эта команда обычно используется в системах Debian. Если... CentOS Для других дистрибутивов может потребоваться использовать yum или dnf для их установки.
В тот момент я использовал Ubuntu 20.04, и весь процесс прошёл довольно гладко.
Основная операция: Настройка префикса кэша
Этот шаг является основой всей конфигурации и ключом к предотвращению путаницы в данных.
Необходимо добавить уникальный префикс кэширования в файл wp-config.php, расположенный в корневом каталоге каждого сайта WordPress.
Откройте файл wp-config.php первого веб-сайта и найдите эту строку комментариев.
/* That's all, stop editing! Happy blogging. */В этой отраслиВыше,添加
// 网站 A 的配置
define( 'WP_CACHE_KEY_SALT', 'site1_unique_string_' );Затем откройте файл wp-config.php на втором веб-сайте и добавьте аналогичную конфигурацию.
// 网站 B 的配置
define( 'WP_CACHE_KEY_SALT', 'site2_unique_string_' );Я вам говорю, строка, следующая за WP_CACHE_KEY_SALT, должна быть...Абсолютно уникальныйДа. Я бы посоветовал использовать доменное имя сайта или его аббревиатуру напрямую, например, site1_com_ или site2_net_.
Я поленилась и использовала цифры, но три месяца спустя совершенно забыла, какая цифра соответствует какому сайту, и мне пришлось искать их по одной, что стало настоящей головной болью.
Подумайте сами: Memcached работает, храня и извлекая данные на основе ключей кэша. Если вы установите уникальный префикс для каждого веб-сайта, их данные будут естественным образом изолированы и не будут мешать друг другу.
Это как дать каждому сайту свой собственный шкафчик. Хотя они все находятся в одной комнате, ключи разные, поэтому данные не перепутаются.
Включить кэширование объектов
После настройки префикса следующим шагом будет включение возможности использования Memcached в WordPress.
Здесь есть два варианта, и я попробовал оба. У каждого есть свои преимущества.
Вариант 1: Метод с использованием плагина (самый простой в использовании)
Войдите в панель администратора WordPress и установите плагин кэширования, поддерживающий Memcached.
рекомендуемые W3 Total CacheСтабильность хорошая. После установки в настройках плагина выберите тип кэширования Memcached, введите адрес сервера 127.0.0.1 и укажите порт по умолчанию 11211, затем сохраните.
Если вам нужно более чистое решение, вы можете установить его напрямую. Кэш объектов Memcached Этот плагин разработан специально для этой цели; он не содержит никаких других дополнительных функций.
Честно говоря, поначалу мне казалось, что подход с плагинами довольно хорош, поскольку это удобно. Но позже я обнаружил, что некоторые плагины содержат множество ненужных мне функций, и я постоянно беспокоюсь об обновлениях, боясь, что они внезапно добавят какую-нибудь функцию, которая испортит мою конфигурацию.
Вариант 2: Развернуть object-cache.php вручную (более контролируемый вариант)
Если вы, как и я, немного перфекционист и не хотите устанавливать слишком много плагинов, то можете воспользоваться этим решением.
Скачайте из официального репозитория плагинов WordPress. Кэш объектов Memcached Этот плагин можно использовать, или же вы можете найти последнюю версию файла object-cache.php на GitHub. Затем загрузите извлеченный файл object-cache.php в каталог wp-content каждого веб-сайта через FTP или SSH.
Обратите внимание, что это корневой каталог wp-content, а не подкаталог plugins.
После добавления WordPress автоматически распознает и активирует кэширование. Вам не нужно ничего настраивать, поскольку он будет считывать значение WP_CACHE_KEY_SALT, которое вы установили ранее в файле wp-config.php.
Мне хотелось сэкономить время, поэтому я выбрал это решение, главным образом потому, что оно контролируемо. Если возникнет проблема, я буду знать, где искать решения, и меня не застанут врасплох автоматические обновления плагинов.
Убедитесь, что конфигурация эффективна.
После завершения подготовки образца вам наверняка захочется узнать, был ли он успешным, верно?
Простейший способ — проверить состояние Memcached. Подключитесь с помощью telnet или nc.
echo "stats" | nc 127.0.0.1 11211Затем вы увидите множество статистических данных. Обратите особое внимание на значения `cmd_set` и `get_hits` и несколько раз обновите страницу, чтобы увидеть, увеличиваются ли они. Если да, значит, кэш работает корректно.
Другой, более наглядный способ проверить это — открыть оба сайта одновременно и посмотреть, не мешают ли они друг другу. Если сайт A не отображает контент с сайта B, это, по сути, означает, что префикс работает.
В то время я провел еще более тщательное тестирование. Я установил разные временные значения на двух разных веб-сайтах, а затем использовал инструмент nc для прямого запроса данных в Memcached. Я действительно смог увидеть две пары ключ-значение с разными префиксами, без какой-либо путаницы.
В тот момент я действительно почувствовал, что совершил нечто великое, и даже просто мысли об этом вызывают у меня восторг.
Не игнорируйте вопросы безопасности.
Поскольку все веб-сайты используют один и тот же экземпляр Memcached, существует риск для безопасности, о котором вам следует знать.
Теоретически, если на сервере находятся другие пользователи, они могут прочитать ваши кэшированные данные через локальный порт. Хотя это требует определенного уровня технических знаний, всегда следует проявлять осторожность.
Поэтому необходимо убедиться, что Memcached работает должным образом. Никогда не прослушивайте общедоступные IP-адреса.В конфигурационном файле `/etc/memcached.conf` убедитесь, что присутствует эта строка.
-l 127.0.0.1Таким образом, Memcached будет прослушивать только локальный адрес обратной связи и не будет доступен извне.
Если у вас чрезвычайно высокие требования к безопасности или если на вашем сервере размещены веб-сайты, которые вызывают опасения у других пользователей, я рекомендую рассмотреть возможность использования Redis вместо Memcached. Redis поддерживает изоляцию между несколькими базами данных и проверку паролей, что делает его гораздо более безопасным.
Однако Redis немного сложнее в настройке, чем Memcached. Если вы используете его только для личных целей или для небольшой команды, то Memcached с ограничением на количество прослушиваний в 127.0.0.1, по сути, будет достаточен.
Некоторые подводные камни, с которыми пришлось столкнуться
В заключение позвольте мне рассказать о нескольких подводных камнях, с которыми я столкнулся, в надежде помочь вам избежать некоторых ошибок.
Версия расширения PHP должна быть совместима.Ранее я столкнулся с ситуацией, когда установил расширение php-memcached, но WordPress его не распознал. Позже я выяснил, что это произошло из-за несоответствия версий PHP. Обязательно тщательно проверяйте версию PHP при установке расширений, чтобы избежать установки неправильной версии.
Убедитесь, что вы правильно указали путь к файлу object-cache.php.Убедитесь, что вы разместили его в корневом каталоге wp-content, а не в каталоге plugins. Мой друг разместил его не в том месте и потратил кучу времени, пытаясь это исправить, но безуспешно.
Не используйте слишком короткую строку для префикса кэша.Сначала я использовал a_ или b_, но позже обнаружил, что они слишком короткие и легко конфликтуют с ключами кэша WordPress. Вам следует использовать как минимум случайную строку из семи или восьми символов или сокращение доменного имени.
Не забудьте очистить кэш обоих сайтов.Однажды я очистил кэш только одного сайта, но на другом сайте всё ещё сохранились старые данные, из-за чего содержимое двух сайтов стало несогласованным. Мне потребовалось много времени, чтобы найти причину проблемы.
Честно говоря, я не знаю, пригодится ли этот опыт всем, но я поделился им без всяких оговорок.
Напишите в конце
Настройка Memcached для нескольких сайтов технически несложна; основная проблема заключается в настройке префикса кэша. Однако дьявол кроется в деталях. Проблемы с сопоставлением версий, путями к файлам и настройками безопасности могут доставить вам немало хлопот.
Я использую этот метод уже почти год, управляю тремя сайтами на WordPress, и пока не сталкивался с серьезными проблемами. Если вы занимаетесь чем-то подобным, возможно, вам стоит попробовать.
Кстати, если у вас есть более удачные решения или вы столкнулись с какими-либо интересными трудностями, не стесняйтесь оставлять комментарии и делиться ими. Мне было бы интересно узнать от вас.
В конце концов, чем больше людей об этом узнают, тем меньше попадёт в эту ловушку, верно?
Раз уж вы дочитали до этого места, если вам это показалось полезным, пожалуйста, поставьте лайк и поделитесь этим постом. Если вы хотите получать обновления первыми, вы также можете подписаться на меня!
Спасибо за прочтение моей статьи. До встречи в следующий раз.
Блог Хоуп Чен Вейлян ( https://www.chenweiliang.com/ Статья «Как использовать Memcached на нескольких сайтах WordPress на одном сервере? Полное руководство по настройке для предотвращения 100% ошибок», размещенная здесь, может оказаться вам полезной.
Добро пожаловать, чтобы поделиться ссылкой на эту статью:https://www.chenweiliang.com/cwl-34368.html
