Битрикс. Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут
При обмене 1С с 1С-Битрикс иногда возникает ошибка:
Авторизация не выполнена.
Не удалось установить соединение с сервером.
Проверьте имя пользователя и пароль.
Ответ сервера: failure
Время на сервере базы данных отличается от времени на веб-сервере больше чем на 10 минут.
Вероятно неправильно настроены временные зоны.
Выполните настройку и повторите обмен.
На первый взгляд кажется, что проблема связана с авторизацией 1С, логином или паролем.
Но на самом деле ошибка возникает из-за неправильной настройки временной зоны на сервере.
Почему появляется ошибка
При обмене данными Битрикс проверяет:
- время PHP;
- время базы данных;
- разницу между сервером и 1С.
Если время отличается более чем на 10 минут, обмен блокируется.
Что нужно проверить
Проверяем:
- часовой пояс PHP;
- часовой пояс MySQL;
- системное время Linux;
- таймзону Bitrix.
1. Определяем правильный часовой пояс
Список поддерживаемых timezone:
http://php.net/manual/en/timezones.php
Например, для Москвы:
Europe/Moscow
2. Настраиваем timezone для PHP
Открываем файл:
/bitrix/php_interface/dbconn.php
И добавляем строку:
date_default_timezone_set("Europe/Moscow");
Что делает date_default_timezone_set
Эта функция:
- устанавливает временную зону для PHP;
- синхронизирует работу функций даты и времени;
- устраняет конфликт времени при обмене.
3. Настраиваем timezone для базы данных
Открываем файл:
/bitrix/php_interface/after_connect_d7.php
И добавляем:
$connection->queryExecute(
'SET LOCAL time_zone="'.date('P').'"'
);
Что делает after_connect_d7.php
Этот файл выполняется:
- после подключения к базе данных;
- на каждом запросе Bitrix.
В данном случае:
- MySQL получает текущую timezone PHP;
- время базы синхронизируется с веб-сервером.
Дополнительно проверьте системное время Linux
На сервере Linux желательно проверить:
timedatectl
Или:
date
Настройка timezone в Linux
Для установки временной зоны:
timedatectl set-timezone Europe/Moscow
Перезапуск PHP
После изменения timezone желательно перезапустить:
- php-fpm;
- Apache;
- Nginx + PHP-FPM.
Например:
systemctl restart php8.2-fpm
Как проверить что проблема решена
После настройки:
- повторно запускаем обмен с 1С;
- ошибка времени исчезает;
- авторизация проходит успешно.
На что еще обратить внимание
Если ошибка осталась, дополнительно проверьте:
- время на сервере 1С;
- NTP-синхронизацию;
- UTC offset;
- timezone MySQL;
- разницу времени Docker-контейнеров.
Итог
Ошибка:
Время на сервере базы данных отличается от времени на веб-сервере
чаще всего связана с неправильной настройкой timezone в PHP или MySQL.
После синхронизации времени обмен 1С с Битрикс начинает работать корректно.
Комментарии