Next Generation CMS - Управляйте контентом без границ!
Создавай
Развивай
Управляй
Актуальная v.1.0.0
Настройка BrainyCP на поддомене и устранение конфликта PHPSE...
Главная страница / Разработка / 💻 Немного о серверах / Настройка BrainyCP на поддомене и устранение конфликта PHPSE...

Настройка BrainyCP на поддомене и устранение конфликта PHPSESSID

При переносе панели управления BrainyCP с прямого доступа по IP-адресу на отдельный поддомен может возникнуть неожиданная проблема: панель открывается, логин и пароль правильные, но после нажатия кнопки входа пользователь снова оказывается на странице авторизации.


Особенно часто подобная ситуация возникает на серверах, где одновременно размещено несколько сайтов, использующих PHP-сессии с cookie PHPSESSID .

В этой статье рассмотрим практическую настройку BrainyCP на поддомене с HTTPS, подключение через Apache reverse proxy и устранение конфликта PHP-сессий с помощью отдельного имени cookie BRAINYSESSID .

В чём заключается проблема

Предположим, что BrainyCP доступен непосредственно по адресу:

Код : xml
https://82.39.214.228:8000

При этом необходимо сделать нормальный адрес панели:

Код : xml
https://panel.example.com

После настройки HTTPS и reverse proxy сама панель может открываться нормально, однако авторизация не работает: после ввода правильных данных снова появляется форма входа.

Одна из возможных причин — конфликт cookies PHP-сессий.

Например, браузер может одновременно хранить:

Код : xml
PHPSESSID=...
Domain: .example.com
Path: /

и:

Код : xml
PHPSESSID=...
Domain: panel.example.com
Path: /

Для разных сайтов это может привести к тому, что приложение получает не ту сессию, которую ожидает.

В случае со старой версией BrainyCP проблема особенно заметна, поскольку панель использует PHP-сессию непосредственно при проверке авторизации.

Схема работы

После настройки запрос к панели проходит следующую цепочку:

Код : xml
Браузер
|
v
panel.example.com:443
|
v
Apache
|
v
127.0.0.1:8002
|
v
nginx BrainyCP
|
v
PHP-FPM BrainyCP
|
v
BRAINYSESSID

При этом обычные сайты сервера продолжают использовать стандартный:

Код : xml
PHPSESSID

А сама панель BrainyCP получает отдельную cookie:

Код : xml
BRAINYSESSID

1. Проверяем DNS

Сначала необходимо убедиться, что поддомен панели указывает на сервер.

Например:

Код : xml
panel.example.com

Проверяем DNS:

Код : xml
dig +short panel.example.com

В результате должен отображаться IP-адрес сервера.

2. Проверяем работу BrainyCP локально

BrainyCP в рассматриваемой конфигурации использует nginx на портах 8000 и 8002 .

Проверяем HTTPS:

Код : xml
curl -k -I https://127.0.0.1:8000

И HTTP:

Код : xml
curl -I http://127.0.0.1:8002

Если сервер отвечает кодом 200 , значит сама панель работает, и проблему нужно искать в способе доступа к ней.

3. SSL-сертификат для панели

Для доступа к панели по HTTPS удобно использовать сертификат Let's Encrypt.

Проверяем наличие сертификата:

Код : xml
ls -la /etc/letsencrypt/live/panel.example.com/

Обычно здесь находятся следующие файлы:

Код : xml
cert.pem
chain.pem
fullchain.pem
privkey.pem

4. Создаём reverse proxy Apache

Если Apache уже принимает входящие HTTPS-запросы на 443 порту, можно передать запросы панели на локальный nginx BrainyCP.

Создаём конфигурацию:

Код : xml
nano /etc/httpd/conf.d/panel.example.com.conf

Добавляем:

Код : xml
<VirtualHost IP-АДРЕС-СЕРВЕРА:443>
ServerName panel.example.com

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/panel.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/panel.example.com/privkey.pem

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8002/
ProxyPassReverse / http://127.0.0.1:8002/

ErrorLog /var/log/httpd/panel.example.com-error.log
CustomLog /var/log/httpd/panel.example.com-access.log combined
</VirtualHost>

Проверяем конфигурацию Apache:

Код : xml
httpd -t

Если получаем:

Код : xml
Syntax OK

перезагружаем конфигурацию Apache:

Код : xml
systemctl reload httpd

После этого проверяем доступность панели:

Код : xml
curl -k -I https://panel.example.com

Если получаем ответ 200 , reverse proxy работает.

5. Передаём реальный IP клиента

При использовании reverse proxy появляется дополнительный уровень между браузером и PHP-FPM:

Код : xml
Браузер → Apache → nginx → PHP-FPM

Поэтому необходимо корректно передавать реальный IP посетителя.

Создаём или проверяем файл:

Код : xml
nano /etc/httpd/conf.d/remoteip.conf

Содержимое:

Код : xml
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
</IfModule>

Проверяем конфигурацию:

Код : xml
httpd -t

И перезагружаем Apache:

Код : xml
systemctl reload httpd

6. Настройка real IP в nginx BrainyCP

Теперь необходимо сообщить nginx BrainyCP, что реальный IP пользователя передаётся через заголовок X-Forwarded-For .

Создаём файл:

Код : xml
nano /usr/local/brainycp/src/compiled/nginxb/conf.d/realip.conf

Добавляем:

Код : xml
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

Проверяем nginx:

Код : xml
/usr/sbin/nginxb -t

Если ошибок нет, применяем настройки:

Код : xml
/usr/sbin/nginxb -s reload

7. Находим PHP-FPM BrainyCP

BrainyCP использует собственный PHP-FPM, поэтому сначала определяем доступные службы:

Код : xml
systemctl list-units --type=service --all | grep -Ei 'brainy.*php|php.*brainy'

В нашем случае были обнаружены:

Код : xml
brainyphp-fpm.service
brainyphp8-fpm.service

Поскольку панель работает на PHP 8, используется:

Код : xml
brainyphp8-fpm.service

8. Находим конфигурацию PHP-FPM

Основной конфигурационный файл PHP-FPM:

Код : xml
/usr/local/brainycp/src/compiled/php8/php-fpm.conf

Конфигурация пула PHP-FPM, используемого панелью:

Код : xml
/usr/local/brainycp/src/compiled/php8/php-fpm.d/brainy.conf

Проверить текущие настройки пула можно командой:

Код : xml
grep -n "^[brainy.conf]\|session.name\|php_admin_value\|php_value" \
/usr/local/brainycp/src/compiled/php8/php-fpm.d/brainy.conf

Если session.name отсутствует, PHP использует стандартное имя сессии:

Код : xml
PHPSESSID

9. Почему PHPSESSID конфликтует

Стандартное имя PHP-сессии — PHPSESSID . Если несколько сайтов используют один основной домен или общий cookie domain, браузер может хранить несколько cookies с одинаковым именем.

Например:

Код : xml
PHPSESSID
Domain: .example.com
Path: /

и:

Код : xml
PHPSESSID
Domain: panel.example.com
Path: /

В результате BrainyCP может получить неправильный идентификатор сессии.

Один из характерных симптомов — после успешной отправки формы авторизации панель снова показывает страницу входа.

10. Создаём отдельное имя сессии для BrainyCP

Менять имя сессии глобально для всех сайтов не нужно.

Правильнее задать отдельное имя только для PHP-FPM пула BrainyCP:

Код : xml
BRAINYSESSID

Открываем конфигурацию:

Код : xml
nano /usr/local/brainycp/src/compiled/php8/php-fpm.d/brainy.conf

После строки:

Код : xml
php_admin_value[error_log] = /var/log/brainyphp-fpm/www-error.log

добавляем:

Код : xml
php_admin_value[session.name] = BRAINYSESSID

В итоге соответствующий фрагмент должен выглядеть так:

Код : xml
php_admin_value[error_log] = /var/log/brainyphp-fpm/www-error.log
php_admin_value[session.name] = BRAINYSESSID

Добавить строку можно также одной командой:

Код : xml
sed -i '/^php_admin_value[error_log]/a php_admin_value[session.name] = BRAINYSESSID' \
/usr/local/brainycp/src/compiled/php8/php-fpm.d/brainy.conf

Проверяем результат:

Код : xml
grep -n "session.name\|error_log" \
/usr/local/brainycp/src/compiled/php8/php-fpm.d/brainy.conf

11. Проверяем конфигурацию PHP-FPM

Перед перезапуском PHP-FPM обязательно проверяем конфигурацию.

В нашей установке бинарник PHP-FPM находится здесь:

Код : xml
/usr/local/brainycp/src/compiled/php8/bin/php-fpm

Проверка:

Код : xml
/usr/local/brainycp/src/compiled/php8/bin/php-fpm \
-t \
-y /usr/local/brainycp/src/compiled/php8/php-fpm.conf

При успешной проверке появляется сообщение:

Код : xml
NOTICE: configuration file /usr/local/brainycp/src/compiled/php8/php-fpm.conf test is successful

Если проверка завершилась ошибкой, PHP-FPM перезапускать не следует — сначала необходимо исправить конфигурацию.

12. Перезапускаем PHP-FPM BrainyCP

После успешной проверки перезапускаем только PHP-FPM BrainyCP:

Код : xml
systemctl restart brainyphp8-fpm

Другие PHP-FPM сайтов при этом перезапускать не требуется.

Проверяем состояние службы:

Код : xml
systemctl status brainyphp8-fpm --no-pager

Нас интересует строка:

Код : xml
Active: active (running)

13. Проверяем новую cookie

Теперь открываем панель:

Код : xml
https://panel.example.com

В инструментах разработчика браузера открываем раздел Cookies.

Для BrainyCP должна появиться cookie:

Код : xml
BRAINYSESSID

При этом обычные сайты продолжают использовать:

Код : xml
PHPSESSID

Таким образом, сессия панели полностью отделена от сессий сайтов.

14. Что делать со старым PHPSESSID

Если до исправления проблемы браузер уже получил старую cookie PHPSESSID для панели, её можно удалить для домена панели.

Например, удалить старую cookie для:

Код : xml
panel.example.com

После этого снова открыть страницу входа и авторизоваться.

Удалять cookies всех сайтов сервера необязательно.

15. Проверка результата

После завершения настройки должна получиться следующая схема:

Код : xml
Сайты:
PHPSESSID

BrainyCP:
BRAINYSESSID

При этом:

  • панель открывается через HTTPS;
  • доступ выполняется по нормальному поддомену;
  • Apache передаёт запросы на локальный nginx BrainyCP;
  • nginx передаёт запросы в PHP-FPM;
  • BrainyCP получает собственную PHP-сессию;
  • cookies других сайтов не влияют на авторизацию панели.

Полезные команды

Проверка DNS

Код : xml
dig +short panel.example.com

Проверка Apache

Код : xml
httpd -t

Перезагрузка Apache

Код : xml
systemctl reload httpd

Проверка nginx BrainyCP

Код : xml
/usr/sbin/nginxb -t

Перезагрузка nginx BrainyCP

Код : xml
/usr/sbin/nginxb -s reload

Поиск PHP-FPM BrainyCP

Код : xml
systemctl list-units --type=service --all | grep -Ei 'brainy.*php|php.*brainy'

Проверка PHP-FPM

Код : xml
/usr/local/brainycp/src/compiled/php8/bin/php-fpm \
-t \
-y /usr/local/brainycp/src/compiled/php8/php-fpm.conf

Перезапуск PHP-FPM BrainyCP

Код : xml
systemctl restart brainyphp8-fpm

Проверка службы

Код : xml
systemctl status brainyphp8-fpm --no-pager

Лог PHP-FPM

Код : xml
tail -50 /var/log/brainyphp-fpm/www-error.log

Лог панели Apache

Код : xml
tail -50 /var/log/httpd/panel.example.com-error.log

Заключение

Если BrainyCP нормально работает при входе по IP-адресу, но после переноса на поддомен перестаёт сохранять авторизацию, одной из причин может быть конфликт PHP-сессий.

Вместо изменения исходного кода BrainyCP или отключения проверки IP и авторизации проблему можно решить на уровне PHP-FPM.

Основная настройка заключается всего в одной строке:

Код : xml
php_admin_value[session.name] = BRAINYSESSID

После перезапуска:

Код : xml
systemctl restart brainyphp8-fpm

BrainyCP начинает использовать отдельную cookie BRAINYSESSID , тогда как остальные сайты сервера продолжают работать со стандартной PHPSESSID .

Такой вариант позволяет изолировать сессию панели от сессий сайтов и избежать конфликтов при размещении BrainyCP на отдельном поддомене.


Добавить комментарий

  • 3 × 8 = ?

Build source code multi #259

07 Oct 2026 , admin
Всем привет. Свеженькая сборка Build source c...

Оптимизация скорости NGCMS: ка...

06 Oct 2026 , admin
NGCMS — достаточно лёгкая CMS, однако со врем...

Настройка BrainyCP на поддомен...

06 Oct 2026 , admin
При переносе панели управления BrainyCP с пря...

Шаблоны

Шаблон админ-панели Old2

Шаблон админ-панели Old2

Шаблон админ-панели Old2, одна из моих старых попыток адаптации старой админки на новый лад, вот подумал чего добру пропадать , адаптировал до последней версии
Шаблон админ-панели Oniks

Шаблон админ-панели Oniks

Один из старых скинов админки от Русика , адаптирован под последнею версию движка .
Шаблон Android Dev

Шаблон Android Dev

Данный шаблон выполнен с преобладанием зелёного и белого цветов. Это подсознательно подчёркивает тему мобильных устройств на платформе андроид. Сам по себе, шаблон Android Dev очень лёгкий и быстрый п...
Шаблон админ-панели Velonic

Шаблон админ-панели Velonic

Шаблон полностью адаптивный, настраивается на свой вкус и цвет.
Шаблон Travel Hour

Шаблон Travel Hour

Travel Hour - красивое и замечательное решение для создания туристического сайта, сайта о курортах и турах, сайта об отдыхе. Шаблон полностью адаптивный, прекрасно отображается на планшетах и смартфон...
Русский
up