Php session save path redis

Setting Up Redis for PHP Session Storage on Linux

Redis is an in-memory data structure store, widely used as a database, cache, and message broker. It is particularly useful for managing PHP sessions due to its high performance, low latency, and data persistence capabilities. In this article, we will guide you through the entire process of installing, configuring, and using Redis as a session store for PHP applications.

Installing Redis on Your System

First, you need to install Redis on your Linux distribution. The installation process varies depending on the package manager used by your distribution. Here are some examples:

    For Debian-based systems (e.g., Ubuntu), use the apt package manager:

sudo apt update sudo apt install redis-server 

After installation, enable and start the Redis service:

sudo systemctl enable redis sudo systemctl start redis 

Installing the PHP Redis Extension

To use Redis for PHP sessions, you need to install the PHP Redis extension. The installation process depends on your PHP version and package manager.

    For Debian-based systems (e.g., Ubuntu), use the apt package manager:

sudo apt install php-redis 
sudo yum install php-pecl-redis 

For Arch Linux, use the pacman package manager:

After installation, restart your web server to load the PHP Redis extension:

Configuring PHP to Use Redis for Session Management

To configure PHP to use Redis for session management, edit your `php.ini` file (typically found in `/etc/php/VERSION/fpm/` or `/etc/php/VERSION/apache2/` for Debian-based systems, or `/etc/php.ini` for RHEL-based systems). Add or modify the following lines:

Replace localhost with your Redis server’s IP address if it is not running on the same machine as your PHP application. Replace `6379` with the appropriate port number if your Redis server is running on a different port.

After editing the php.ini file, restart your web server to apply the changes:

Testing Redis-Powered PHP Sessions

To test if your PHP application is using Redis for session management, create a simple PHP script with the following content:

Читайте также:  Python http post socket

Save this script as `session_test.php` and upload it to your web server. Access the script in your web browser. The counter should increment on each page refresh, confirming that PHP sessions are being stored in Redis.

Securing and Optimizing Your Redis-Powered PHP Sessions

For production environments, it is essential to secure and optimize your Redis-powered PHP sessions to ensure high performance and data integrity. Here are some recommendations:

    Configure Redis password authentication: Edit your Redis configuration file (typically found in `/etc/redis/redis.conf`) and set the `requirepass` directive to a strong password:

requirepass your_secure_password 

Then, update your `php.ini` file to include the password in the `session.save_path`:

Restart the Redis service and your web server to apply the changes.

Источник

Обработка сессий PHP при помощи сервера Redis в Ubuntu 14.04

Redis – это открытая нереляционное хранилище данных и кэша типа «ключ-значение». Также Redis является сервером преобразования структур данных, предназначенным для расширенной поддержки нескольких типов данных (хэша, списков, множеств и битовых массивов и т.п.). Кроме того, Redis поддерживает кластеризацию, потому его часто используют в высокопроизводительных и масштабируемых средах.

Данное руководство поможет установить и настроить сервер Redis для обработки PHP-сессий приложения в системе Ubuntu 14.04.

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

Требования

Для выполнения данного руководства использовалось два сервера.

Примечание: Из соображений безопасности и производительности важно, чтобы оба сервера находились в одном центре обработки данных с включенной частной сетью.

Итак, для работы понадобится:

  • Сервер 1 (в руководстве он будет называться web): Предварительно установленный веб-сервер; можно использовать стек LAMP или LEMP.
  • Сервер 2 (в руководстве он будет называться redis): свежий сервер Ubuntu 14.04, на котором будет установлен Redis.
  • Доступ SSH.

1: Установка Redis

Сначала нужно установить сервер Redis.

Для этого подойдёт пакет из репозитория PPA.

Важно! Используйте наиболее актуальную версию Redis.

Из соображений безопасности рекомендуется работать только с надёжными и проверенными источниками репозиториев PPA.

Чтобы добавить репозиторий PPA, введите:

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

Для подтверждения нажмите Enter.

Обновите кэш пакетного менеджера:

sudo apt-get install redis-server

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

Команда создаст подключение к Redis с локального хоста на порт 6379. Если установка прошла успешно, команда вернёт:

2: Настройка Redis для поддержки внешних соединений

По умолчанию Redis поддерживает подключения только с локального хоста. Это значит, что Redis доступен только с того сервера, на котором он установлен. Эту настройку нужно изменить.

Читайте также:  Только четные числа php

Для начала нужно узнать IP-адрес частной сети сервера Redis.

Примечание: Следующие действия нужно выполнить на сервере redis.

Запустите команду ifconfig, чтобы получить сведения о сетевых интерфейсах.

Команда вернёт примерно следующий вывод:

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:10.133.14.9 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-адрес сети, который необходим для настройки подключения сервера web к серверу redis.

При помощи редактора откройте файл /etc/redis/redis.conf и найдите строку bind. После localhost вставьте в неё полученный IP-адрес частной сети.

sudo vim /etc/redis/redis.conf
bind localhost 10.133.14.9

Примечание: Вместо localhost строка может содержать 127.0.0.1.

Перезапустите сервис Redis, чтобы обновить настройки.

sudo service redis-server restart

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

3: Пароль для сервера Redis

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

sudo vim /etc/redis/redis.conf

Раскомментируйте строку requirepass и установите надёжный пароль.

Перезапустите сервис Redis:

sudo service redis-server restart

4: Тестирование подключения и авторизации Redis

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

redis-cli -h 10.133.14.9
10.133.14.9:6379>

Параметр host использовать необязательно, но в этой команде он присутствует для того, чтобы подтвердить, что сервис Redis может принимать соединения, направленные на частный сетевой интерфейс.

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

keys *
(error) NOAUTH Authentication required.

Чтобы пройти аутентификацию, нужно запустить команду AUTH и добавить в неё установленный ранее пароль:

Если пароль правильный, команда вернёт:

На экране появится примерно такой вывод:

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

Оставьте эту сессию SSH открытой и подключитесь к redis-cli. После настройки сервера web нужно будет вернуться в командную строку redis-cli, чтобы убедиться в том, что Redis может хранить данные.

Читайте также:  Img tag class html

5: Установка расширений Redis на сервер web

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

Обновите кэш пакетного менеджера:

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

sudo apt-get install php5-redis

Теперь веб-сервер может подключаться к серверу redis.

6: Настройка обработки сессий

Оставайтесь на сервере web. Откройте файл php.ini, в котором можно определить стандартный обработчик сессий PHP. Место хранения файла зависит от используемого программного стека. В стеке LAMP в Ubuntu 14.04 этот файл обычно находится в /etc/php5/apache2/php.ini. В стеке LEMP в системе Ubuntu 14.04 файл, как правило, хранится в /etc/php5/fpm/php.ini.

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

Затем откройте скрипт в браузере и найдите строку Loaded Configuration File. В ней указано местонахождение нужного файла.

Примечание: После этого рекомендуется удалить файл info.php, поскольку он открывает доступ к конфиденциальным данным о сервере.

Откройте файл php.ini и найдите строку session.save_handler; по умолчанию она содержит значение files. Измените стандартное значение строки, указав redis.

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

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

Строка должна выглядеть так: session.save_handler = redis

Теперь вы должны найти строку session.save_path. Раскомментируйте ее и измените значение, указав строку подключения Redis в таком формате:

tcp://IPADDRESS:PORT?auth=REDISPASSWORD. Строка должна выглядеть так:
session.save_path = «tcp://10.133.14.9:6379?auth=yourverycomplexpasswordhere»

В параметре auth нужно указать пароль сервера Redis.

Сохраните и закройте файл, а затем перезапустите сервер php.

sudo service apache2 restart

sudo service php5-fpm restart

7: Тестирование обработки сессий

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

На сервере web создайте файл test.php и поместите его в каталог document root.

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

Примечание: Если ваш каталог document root находится в другом месте, откорректируйте эту команду.

Добавьте в файл такой код:

//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;

Чтобы получить доступ к скрипту в браузере, откройте ссылку:

Номер на странице должен увеличиваться после каждого обновления страницы.

Это значит, что теперь данные сессий хранятся в Redis. Чтобы убедиться в этом, вернитесь в сессию SSH на сервере redis, в которой осталось подключение к Redis при помощи redis-cli. Извлеките данные при помощи команды keys *:

На экране появится такой вывод:

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

Источник

Оцените статью