В этой статье мы расскажем всё о самой известной ошибке Redis в WordPress, известной как «Ошибка при установлении соединения с Redis (Error establishing a Redis connection)», и о возможных способах её устранения. Эта проблема может быть вызвана неправильной установкой и настройкой службы Redis, неправильными настройками в файле wp-config.php, проблемами с сетью, конфликтами плагинов в WordPress и т. д. В следующих разделах мы сначала расскажем о Redis и о том, как устранить проблемы, чтобы ваш сайт снова стал доступен. Мы будем использовать ОС Ubuntu 24.04 и предположим, что у вас уже есть рабочая установка WordPress. Давайте начнем!
Redis — это кэш-память с открытым исходным кодом, используемая в качестве кэша приложения, которая хранит данные в оперативной памяти, а не на диске, что повышает надёжность и скорость работы веб-сайта. Redis может быть установлен локально на том же хосте, что и приложение, и удалённо независимо от веб-сайта. Разница в том, что локально установленный Redis может занимать весь процессор или оперативную память и замедлять работу компьютера, делая веб-сайт недоступным из-за нехватки оперативной памяти или процессора. С другой стороны, удалённая установка Redis может привести к задержкам и разрывам соединения между сервером приложений и сервером Redis. Однако рекомендуется использовать Redis обоими способами, и Redis является мощным решением для кэширования на вашем сайте.
В следующих нескольких абзацах мы объясним, какие проблемы могут привести к ошибке при установлении соединения с Redis и как их можно устранить.
Если ваш браузер выдаёт ошибку при установлении соединения с Redis, в первую очередь вам нужно проверить, работает ли служба Redis на вашем сервере. Войдите на свой сервер через SSH и выполните следующую команду:
sudo systemctl status redis
В этом случае возможны два сценария. Когда служба остановлена ИЛИ служба не найдена. Первый сценарий должен выглядеть следующим образом:
root@host:~# sudo systemctl status redis ○ redis-server.service - Advanced key-value store Loaded: loaded (/usr/lib/systemd/system/redis-server.service; enabled; preset: enabled) Active: inactive (dead) since Tue 2025-01-07 13:43:35 CST; 2h ago Duration: 23min 55.576s Docs: http://redis.io/documentation, man:redis-server(1) Process: 299638 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf --supervised systemd --daemonize no (code=exited, status=0/SUCCESS) Main PID: 299638 (code=exited, status=0/SUCCESS) Status: "Saving the final RDB snapshot" CPU: 2.807s Jan 07 16:58:35 host.test.vps systemd[1]: Stopped redis-server.service - Advanced key-value store. Jan 07 16:58:35 host.test.vps systemd[1]: redis-server.service: Consumed 2.807s CPU time, 3.8M memory peak, 0B memory swap peak.
В этом случае нам нужно только запустить службу Redis с помощью следующей команды:
sudo systemctl start redis
Чтобы проверить состояние сервиса, выполните приведенную ниже команду:
sudo systemctl status redis
Вы должны получить результат, подобный этому:
root@host:~# sudo systemctl status redis ● redis-server.service - Advanced key-value store Loaded: loaded (/usr/lib/systemd/system/redis-server.service; enabled; preset: enabled) Active: active (running) since Tue 2025-01-07 13:51:38 CST; 3s ago Docs: http://redis.io/documentation, man:redis-server(1) Main PID: 306399 (redis-server) Status: "Ready to accept connections" Tasks: 5 (limit: 4613) Memory: 3.3M (peak: 3.8M) CPU: 98ms CGroup: /system.slice/redis-server.service └─306399 "/usr/bin/redis-server 127.0.0.1:6379" Jan 07 13:51:38 host.test.vps systemd[1]: Starting redis-server.service - Advanced key-value store... Jan 07 13:51:38 host.test.vps systemd[1]: Started redis-server.service - Advanced key-value store.
Результат второго сценария будет выглядеть следующим образом:
root@host:~# sudo systemctl status redis Unit redis.service could not be found.
Это означает, что служба Redis не существует и была каким-то образом случайно удалена. Чтобы установить её снова, выполните следующую команду:
sudo apt install redis -y
После установки вы можете запустить службу с помощью той же команды, которую мы привели выше:
sudo systemctl start redis
Чтобы проверить, запущен ли Redis, вы можете использовать приведенную ниже команду:
netstat -tunlp | grep 6379
Вы должны получить следующий результат:
root@host:~# netstat -tunlp | grep 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 307089/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 307089/redis-server
По умолчанию Redis работает на порту 6379, и в выводе указано, что этот сервис прослушивает этот порт.
Если сервер Redis недоступен с сервера приложений, нам нужно открыть порт 6379 в брандмауэре на сервере, где установлен Redis. Чтобы открыть порт в Iptables, можно использовать следующие команды:
iptables -A INPUT -p tcp --dport 6379 -j ACCEPT iptables -A OUTPUT -p tcp --dport 6379 -j ACCEPT
Чтобы открыть порт с помощью UFW, вы можете использовать следующую команду:
sudo ufw allow 6379 sudo ufw reload
Другой способ проверить, правильно ли работает Redis, — использовать команду redis-cli. Для этого выполните следующую команду:
redis-cli ping
Если все в порядке, вы должны получить следующие выходные данные:
root@host:~# redis-cli ping PONG
Мы предполагаем, что ранее Redis работал нормально, но по какой-то причине в браузере появилась ошибка при установлении соединения с Redis. Откройте файл wp-config.php в вашем любимом редакторе и обратите внимание на эти строки кода:
define('WP_REDIS_HOST', '127.0.0.1'); define('WP_REDIS_PORT', 6379); define('WP_REDIS_PASSWORD', 'StrongPasswordForRedisHere'); define( 'WP_REDIS_TIMEOUT', 2 ); define( 'WP_REDIS_READ_TIMEOUT', 2 );
Эти строки кода определяют хост Redis, порт, пароль и время ожидания. Если другие настройки в порядке, вы можете попробовать увеличить время ожидания. Другой вариант — проверить, работает ли Redis на удалённом компьютере. Если хост Redis прослушивает общедоступный IP-адрес, вам следует подключиться к этому удалённому серверу и вернуться к первым двум шагам, чтобы проверить службу Redis.
Войдите в панель администратора WordPress. В левом меню перейдите в раздел «Плагины» -> «Установленные плагины». Найдите «Объектный кэш Redis», установите флажок, чтобы выбрать плагин, и нажмите кнопку «Отключить».
После отключения плагина мы можем безопасно удалить его, нажав кнопку удалить.
Теперь мы можем установить его с нуля. Снова перейдите в раздел «Плагины» -> «Добавить новый плагин» и в поле поиска введите «Кэш объектов Redis». Плагин появится слева, и вы сможете нажать кнопку «Установить сейчас».
Предположим, вы не можете выполнить предыдущий шаг и получить доступ к панели администратора WordPress. В этом случае вы можете отключить плагин Redis Object Cache через терминал непосредственно в каталоге плагинов WordPress. Для этого перейдите в корневой каталог вашего сайта.
cd /var/www/html/wordpress/wp-content/plugins/
После перехода перечислите содержимое каталога:
ls -al
Вы должны получить результат, аналогичный этому, или со списком с большим количеством плагинов:
drwxr-xr-x 4 www-data www-data 4096 Nov 21 08:07 akismet -rw-r--r-- 1 www-data www-data 2578 Mar 18 2019 hello.php -rw-r--r-- 1 www-data www-data 28 Jun 5 2014 index.php drwxr-xr-x 6 www-data www-data 4096 Jan 7 15:30 redis-cache
Чтобы отключить плагин Redis Object Cache, выполните следующую команду:
mv redis-cache/ redis-cache.disabled/
Как только это будет сделано, перейдите в каталог wp-content (на один каталог назад):
cd /var/www/html/wordpress/wp-content/
Удалите файл object-cache.php:
rm object-cache.php
Как только это будет сделано, вы сможете повторно запустить свой веб-сайт.
Последнее, что нужно проверить, — это файл журнала сервера Redis. Чтобы проверить файл журнала Redis, выполните следующую команду:
tail -f /var/log/redis/redis-server.log
С помощью этой команды вы можете просматривать журнал в режиме реального времени на своём сервере и все входящие запросы, когда браузер выдаёт ошибку при установлении соединения с Redis.
Вот и всё! Вы узнали, как исправить ошибку при установлении соединения с Redis.
Если вам понравилась эта статья о сбое при установлении соединения Redis в WordPress, пожалуйста, поделитесь ею со своими друзьями или оставьте комментарий ниже.