На одном из проектов я захотел, чтобы обработчиком сессий PHP был Redis. Пробежавшись по просторам инета понял, что не так всё просто. Если переключить на memcached — это дело редактирования двух строк, то с redis не так просто и нужно ставить дополнительную либу для PHP. Кстати, ее сборка уже проскакивала в одной из старых заметок — Установка Redis + Redis PHP на Debian 6.
Установка Redis
Поставить redis сейчас намного проще, чем написано в той старой статье. Достаточно выполнить команду:
# apt-get install redis-server
Сборка и установка phpredis для PHP
C phpredis уже куда интереснее… Сначала нужно скачать исходники с репозитория в папку /tmp и перейти в нее:
# cd /tmp # git clone git://github.com/nicolasff/phpredis.git # cd phpredis
Собираем библиотеку из исходников
# phpize # ./configure # make && make test # make install
В результате увидим адрес папки, где сохранилась наша либа. У меня она сохранилась в /usr/lib/php5/20121212/. Дальше, нужно выставить на нее общие права:
# chmod 644 /usr/lib/php5/20121212/redis.so
Теперь создадим ini-файл с настройками модуля в стиле других модулей PHP в Debian:
# nano /etc/php5/mods-available/redis.ini
Напишем в файл такую инфу:
; configuration for phpredis module ; priority=20 extension=redis.so
Теперь создадим линки на модуль для PHP-FPM, CGI и CLI:
# ln -s ../../mods-available/redis.ini /etc/php5/fpm/conf.d/20-redis.ini # ln -s ../../mods-available/redis.ini /etc/php5/cli/conf.d/20-redis.ini # ln -s ../../mods-available/redis.ini /etc/php5/cgi/conf.d/20-redis.ini
Перезапускаем PHP-FPM:
# service php5-fpm restart
Проверяем подключился ли модуль к PHP:
# php -m | grep redis
Если в ответе получили «redis», тогда всё прошло хорошо и модуль подключен.
Теперь можно удалить исходники модуля:
# cd .. # rm -R phpredis/
Подлючение Redis в роли обработчика сессий
Для начала попробуем подключить redis и php через tcp. Для этого нам нужно открыть конфиг php:
# nano /etc/php5/fpm/php.ini
Заменяем две строки:
session.save_handler = redis session.save_path = tcp://127.0.0.1:6379
Перезапускаем PHP и радуемся 🙂
# service php5-fpm restart
Для верности можно проверить логи php и, если есть какое-то приложение или веб-сайт на сервере, проверить на нем.
Подключение Redis и PHP через unix socket
Но мне tcp как-то не очень нравится, поэтому я выбрал подключение через unix socket. Для этого нужно отредактировать конфиг redis:
# unixsocket /tmp/redis.sock # unixsocketperm 700
меняем на:
unixsocket /tmp/redis.sock unixsocketperm 777
Теперь отредактируем настройки PHP:
# nano /etc/php5/fpm/php.ini
Редактируем такие параметры:
session.save_handler = redis session.save_path = unix:///tmp/redis.sock?persistent=1&weight=1&database=0
Перезапускаем Redis и PHP:
# service redis-server restart && service php5-fpm restart
Теперь можно проверить работоспособность сессий и получать удовольствие. Надеюсь, кому-то будет полезным! 🙂
26 августа, 2015 at 8:13 дп
Почему redis, а не memcache?
1 октября, 2015 at 2:19 пп
Redis мне как-то больше нравится, чем мемкеш. Да и на сервере уже использовался редис для кеша.
30 августа, 2015 at 11:49 дп
Спасибо за мануал.
А скажите пожалуйста, для такой связки Nginx + Apache + fastcgi данный мануал подойдет?
1 октября, 2015 at 2:27 пп
Да, подойдет. Не уверен, что с такой связкой есть смысл думать о другом обработчике сессий, но если хотите попробовать, возможно, Вам будет удобнее использовать memcached, для него не нужно собирать модули. По сути устанавливаете memcached, модуль для php и правите конфиг php.ini согласно документации: http://php.net/manual/ru/memcached.sessions.php — первый комментарий