Как настроить сервер Redis в качестве обработчика сеанса для PHP в Ubuntu 14.04

Вступление

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

В этом руководстве мы увидим, как установить и настроить внешний сервер Redis для использования в качестве обработчика сеанса для приложения PHP, работающего в Ubuntu 14.04.

Обработчик сеанса отвечает за хранение и извлечение данных, сохраненных в сеансах - по умолчанию PHP использует для этого * files *. Внешний обработчик сеанса может использоваться для создания scalable сред PHP за https://www.digitalocean.com/community/ учебные пособия / концепции введения в haproxy-and-load-балансировки [балансировщик нагрузки], где все узлы приложений будут подключаться к центральному серверу для обмена информацией о сеансе.

Предпосылки

В этом уроке мы будем работать с двумя разными серверами. По соображениям безопасности и производительности важно, чтобы обе капли располагались в одном центре обработки данных с https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking [ частная сеть] включена. Это то, что вам нужно:

  • Веб-сервер PHP, на котором работает LAMP или https: //www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04[LEMP] в Ubuntu 14.04 - мы будем ссылаться на этот сервер как * сеть *

  • Второй, чистый сервер Ubuntu 14.04, на котором будет установлен Redis - мы будем называть этот сервер * redis *

Вам понадобится правильный SSH-доступ к обоим серверам как обычному пользователю с разрешения sudo.

Шаг 1 - Установите Redis Server

Первое, что нам нужно сделать, это запустить и запустить сервер Redis на нашем * redis * Droplet.

Мы будем использовать обычный менеджер пакетов Ubuntu с доверенным репозиторием PPA, предоставленным Крисом Ли. Это необходимо для того, чтобы мы получили последнюю стабильную версию Redis.

Сначала добавьте хранилище PPA, выполнив:

sudo add-apt-repository ppa:chris-lea/redis-server

Нажмите + ENTER + для подтверждения.

Теперь вам нужно обновить кеш менеджера пакетов:

sudo apt-get update

И наконец, давайте установим Redis, запустив:

sudo apt-get install redis-server

Redis теперь должен быть установлен на вашем сервере. Чтобы проверить установку, попробуйте эту команду:

redis-cli ping

Это подключится к экземпляру Redis, работающему на * localhost * через порт * 6379 *. Вы должны получить * PONG * в качестве ответа.

Шаг 2 - Настройте Redis для принятия внешних подключений

По умолчанию Redis разрешает подключения только к + localhost +, что в основном означает, что вы будете иметь доступ только с сервера, на котором установлен Redis. Нам нужно изменить эту конфигурацию, чтобы разрешить подключения, исходящие с других серверов в той же частной сети, что и сервер * redis *.

Первое, что нам нужно сделать, это выяснить IP-адрес частной сети компьютера Redis. Следующие шаги должны быть выполнены на сервере * redis *.

Запустите + ifconfig +, чтобы получить информацию о ваших сетевых интерфейсах:

sudo ifconfig

Вы должны получить вывод, похожий на этот:

Output    eth0      Link encap:Ethernet  HWaddr 04:01:63:7e:a4:01
             inet addr:188.166.77.33  Bcast:188.166.127.255  Mask:255.255.192.0
             inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
             RX packets:3497 errors:0 dropped:0 overruns:0 frame:0
             TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 txqueuelen:1000
             RX bytes:4895060 (4.8 MB)  TX bytes:619070 (619.0 KB)

   eth1      Link encap:Ethernet  HWaddr 04:01:63:7e:a4:02
             inet addr:  Bcast:10.133.255.255  Mask:255.255.0.0
             inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link
             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
             RX packets:8 errors:0 dropped:0 overruns:0 frame:0
             TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
             collisions:0 txqueuelen:1000
             RX bytes:648 (648.0 B)  TX bytes:578 (578.0 B)

Найдите + inet_addr +, назначенный интерфейсу * eth1 *. В данном случае это + 10.133.14.9 + - это IP-адрес, который мы будем использовать позже для подключения к серверу * redis * с сервера * web *.

Используя ваш любимый редактор командной строки, откройте файл + / etc / redis / redis.conf + и найдите строку, содержащую определение + bind +. Вы должны добавить свой * IP-адрес частной сети * в строку следующим образом:

sudo vim /etc/redis/redis.conf

/etc/redis/redis.conf

bind localhost

Если вы видите + 127.0.0.1 + вместо + localhost +, это нормально; просто добавьте свой личный IP после того, что уже там.

Теперь вам просто нужно перезапустить сервис Redis, чтобы применить изменения:

sudo service redis-server restart

С этим изменением любой сервер в той же частной сети также сможет подключаться к этому экземпляру Redis.

Шаг 3 - Установите пароль для сервера Redis

Чтобы добавить дополнительный уровень безопасности к вашей установке Redis, рекомендуется установить пароль для доступа к данным сервера. Мы отредактируем тот же файл конфигурации из предыдущего шага, + / etc / redis / redis.conf +:

sudo vim /etc/redis/redis.conf

Теперь раскомментируйте строку, содержащую + requirepass +, и установите надежный пароль:

/etc/redis/redis.conf

requirepass

Перезапустите службу Redis, чтобы изменения вступили в силу:

sudo service redis-server restart

Шаг 4 - Проверка подключения Redis и аутентификации

Чтобы проверить, все ли ваши изменения работали должным образом, подключитесь к службе Redis с компьютера * redis *:

redis-cli -h
Output10.133.14.9:6379>

Если вы определили пароль и теперь пытаетесь получить доступ к данным, вы должны получить ошибку AUTH:

keys *
Output(error) NOAUTH Authentication required.

Для аутентификации вам просто нужно запустить команду + AUTH +, предоставив тот же пароль, который вы определили в файле + / etc / redis / redis.conf +:

AUTH yourverycomplexpasswordhere

Вы должны получить * OK * в качестве ответа. Теперь, если вы запустите:

keys *

Вывод должен быть похож на это:

Output(empty list or set)

Эти выходные данные означают, что ваш сервер Redis пуст, что в точности соответствует нашим ожиданиям, поскольку сервер * web * еще не настроен на использование этого сервера Redis в качестве обработчика сеанса.

Держите этот сеанс SSH открытым и подключенным к + redis-cli +, пока мы выполняем следующие шаги - мы вернемся к приглашению + redis-cli +, чтобы проверить, правильно ли хранятся данные сеанса, после того как мы сделаем необходимые изменения на * веб * сервере.

Шаг 5 - Установите расширение Redis на веб-сервере

Следующие шаги должны быть выполнены на сервере * web *. Нам нужно установить расширение PHP Redis, иначе PHP не сможет подключиться к серверу Redis.

Сначала обновите кеш менеджера пакетов, выполнив:

sudo apt-get update

Затем установите пакет + php5-redis +:

sudo apt-get install php5-redis

Ваш веб-сервер теперь должен иметь возможность подключаться к Redis.

Шаг 6 - Установите Redis в качестве обработчика сеанса по умолчанию на веб-сервере

Теперь нам нужно отредактировать файл + php.ini на сервере * web *, чтобы изменить обработчик сеанса по умолчанию для PHP. Расположение этого файла будет зависеть от вашего текущего стека. Для стека * LAMP * в Ubuntu 14.04 это обычно + / etc / php5 / apache2 / php.ini. Для стека * LEMP * в Ubuntu 14.04 обычно используется путь + / etc / php5 / fpm / php.ini +.

Если вы не уверены в местонахождении вашего основного файла + php.ini, выяснить это можно с помощью функции` + phpinfo () + . Просто поместите следующий код в файл с именем `+ info.php + внутри вашего корневого веб-каталога:

<?php
phpinfo();

При доступе к скрипту из вашего браузера найдите строку, содержащую «Loaded Configuration File», и вы должны найти точное местоположение основного загруженного файла + php.ini +.

Откройте файл + php.ini и найдите строку, содержащую` + session.save_handler`. Значением по умолчанию является + files +. Вы должны изменить его на + redis +.

В средах * LAMP *:

sudo vim /etc/php5/apache2/php.ini

В средах * LEMP *:

sudo vim /etc/php5/fpm/php.ini

/etc/php5/fpm/php.ini

session.save_handler = redis

Теперь вы должны найти строку, содержащую + session.save_path +. Раскомментируйте его и измените значение, чтобы оно содержало строку подключения Redis. Содержимое должно иметь следующий формат, все в одной строке: + tcp: // IPADDRESS: PORT? Auth = REDISPASSWORD +

/etc/php5/fpm/php.ini

session.save_path = "tcp://?auth="

Сохраните файл и перезапустите службу * php *.

В средах * LAMP *:

sudo service apache2 restart

В средах * LEMP *:

sudo service php5-fpm restart

Шаг 7 - Проверка обработки сеанса Redis

Чтобы убедиться, что ваши сеансы теперь обрабатываются Redis, вам понадобится PHP-скрипт или приложение, которое хранит информацию о сеансах. Мы собираемся использовать простой скрипт, который реализует счетчик - каждый раз, когда вы перезагружаете страницу, напечатанное число увеличивается.

Создайте файл с именем + test.php + на сервере * web * и поместите его в корневую папку вашего документа:

sudo vim test.php

/usr/share/nginx/html/test.php

<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;

echo $count;

$_SESSION['count'] = ++$count;

Укажите в браузере + http: /// test.php +, чтобы получить доступ к сценарию. Это должно увеличивать число каждый раз, когда вы перезагружаете страницу.

Теперь вы должны хранить информацию о сеансе на сервере Redis. Чтобы проверить, вернитесь к сеансу SSH на машине * redis *, где мы ранее подключались к службе Redis с помощью + redis-cli +. Получить содержимое снова с помощью + keys * +:

keys *

И вы должны получить вывод, похожий на этот:

Output1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"

Это показывает, что информация о сеансе хранится на сервере Redis. Вы можете подключить дополнительные веб-серверы к серверу Redis аналогичным образом.

Заключение

Redis - это мощная и быстрая служба хранения значений ключей, которая также может использоваться в качестве обработчика сеансов для PHP, обеспечивая масштабируемые среды PHP, предоставляя распределенную систему для хранения сеансов. Для получения дополнительной информации о масштабировании PHP-приложений вы можете проверить эту статью: Horizontally Scaling PHP Applications.

Related