В процессе интеграции решений на платформе 1С:Предприятие с веб-ресурсами под управлением 1С-Битрикс специалисты часто сталкиваются со внезапным прекращением обмена. Одной из наиболее коварных является ошибка: Ошибка работы с Интернет: доступ запрещен (403). Ситуация усложняется тем, что при попытке открыть сайт через обычный браузер на том же сервере веб-страницы загружаются без проблем. Однако при выполнении автоматического обмена или интерактивной проверке соединения подключение постоянно обрывается или работает нестабильно.
В этой статье мы подробно проанализируем причины возникновения этой ошибки, разберем по шагам методику диагностики и рассмотрим практические варианты решения проблемы на стороне 1С и веб-сервера.
Прежде чем изменять настройки безопасности сервера или сайта, нам необходимо точно выяснить, на каком этапе происходит сбой. Для этого выполним отладку кода на стороне 1С.
Рассмотрим порядок действий для перехвата сетевого запроса:
ПроцедурыОбменаССайтом.Получить() или ОтправитьДляОбработки() объекта HTTPСоединение./bitrix/admin/1c_exchange.php с GET-параметрами).Если в браузере при переходе по ссылке запрашивается авторизация или отдается пустой XML-файл (что нормально для корректного обращения без параметров), а 1С возвращает 403, то проблема кроется в различиях между HTTP-запросом из браузера и запросом от платформы 1С.
Встроенный модуль «Проактивная защита» (веб-антивирус) Битрикса очень чувствителен к частым и однотипным запросам. Платформа 1С отправляет пакеты данных порциями, что может классифицироваться защитными механизмами сайта как DDoS-атака или попытка подбора пароля (брутфорс). В результате IP-адрес сервера 1С автоматически заносится в стоп-лист.
Этим объясняется плавающий характер ошибки: обмен может успешно пройти три раза подряд, а на четвертый выдать ошибку 403, так как сработала временная блокировка IP-адреса.
Для решения этой проблемы выполним следующие действия:
Если проактивная защита заблокировала и ваш собственный IP, из-за чего «вечно висит» авторизация в админке, можно временно отключить модуль защиты через файлы сайта. Для этого подключимся к сайту по FTP или SSH и очистим содержимое файла по пути /bitrix/modules/security/admin/security_403.php (предварительно сохранив резервную копию файла). После восстановления доступа в админку и настройки правил исключений вернем исходный код файла назад.
Если ваш веб-ресурс находится под защитой сервисов Cloudflare, DDoS-Guard или аналогичных систем фильтрации трафика, они могут блокировать запросы от платформы 1С. Системы WAF (Web Application Firewall) анализируют заголовки сетевых пакетов. По умолчанию 1С отправляет запросы со специфическим заголовком User-Agent, который моментально распознается защитой как бот, в результате чего сервер возвращает статус 403 или требует прохождения капчи.
Чтобы обойти эту блокировку, мы можем переопределить заголовки HTTP-запроса в коде 1С, замаскировав его под обычный браузер.
Посмотрим на пример реализации подмены заголовков в коде 1С:
// Создаем соответствие для заголовков HTTP-запроса
ЗаголовкиЗапроса = Новый Соответствие;
ЗаголовкиЗапроса.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
ЗаголовкиЗапроса.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
ЗаголовкиЗапроса.Вставить("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7");
// Формируем HTTP-запрос с новыми заголовками
Запрос = Новый HTTPЗапрос(ПутьКСкриптуОбмена, ЗаголовкиЗапроса);
Параллельно необходимо зайти в личный кабинет Cloudflare (или используемого вами провайдера защиты) и добавить статический IP-адрес сервера 1С в белый список (Firewall Tools -> IP Access Rules -> Allow).
Характерный симптом — при попытке авторизации под учетной записью пользователя обмена в браузере бесконечно крутится индикатор загрузки. Это происходит из-за механизма блокировки сессионных файлов в PHP.
Когда 1С обращается к файлу 1c_exchange.php, запускается тяжелый и длительный процесс импорта или экспорта данных. PHP открывает сессию текущего пользователя и монопольно блокирует файл этой сессии на сервере. Если в этот момент 1С пытается инициировать новое параллельное соединение или администратор пробует войти под этой же учетной записью через браузер, веб-сервер ожидает освобождения файла сессии. По истечении таймаута веб-сервер возвращает ошибку 403 или 504.
Для решения этой проблемы рекомендуется перевести хранение сессий PHP из файлов в оперативную память (Redis/Memcached) или в базу данных. В 1С-Битрикс это настраивается в конфигурационном файле /bitrix/.settings.php.
Рассмотрим пример перевода сессий в режим хранения в базе данных MySQL:
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'database'
]
]
],
'readonly' => true
]
После сохранения изменений сессии перестанут блокировать файловую систему, что решит проблему зависания авторизации при параллельных запросах от 1С.
Если ваш сайт работает по защищенному протоколу HTTPS, платформа 1С при установке соединения проверяет цепочку доверия SSL-сертификата. Если на сайте используется современный сертификат (например, бесплатный Let's Encrypt), а серверная операционная система, на которой развернут сервер «1С:Предприятие» (например, Windows Server 2008/2012), давно не обновлялась, в локальном хранилище ОС могут отсутствовать актуальные корневые сертификаты (такие как ISRG Root X1).
В этом случае платформа 1С не доверяет сайту и блокирует соединение на уровне протокола TLS, возвращая ошибку доступа.
Проанализируем шаги по исправлению этой ситуации:
.CER (DER-кодированный).certmgr.msc на сервере 1С под учетной записью, под которой запущена служба сервера 1С:Предприятия (обычно это USR1CV8).Иногда системные администраторы настраивают жесткое перенаправление всех запросов с незащищенного протокола HTTP на HTTPS на уровне файла .htaccess или конфигурации Nginx. Если в настройках узла обмена 1С адрес сайта указан с префиксом http://, происходит следующая цепочка событий:
http://mysite.ru/bitrix/admin/1c_exchange.php.https://mysite.ru/bitrix/admin/1c_exchange.php.Выясним, как это исправить. Во-первых, обязательно укажем в настройках интеграции в 1С точный адрес сайта, начиная его строго с https://. Во-вторых, в файле .htaccess в корне сайта добавим исключение для скрипта обмена 1С, чтобы редирект на него не распространялся:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Данное правило позволит скрипту обмена корректно принимать запросы без риска потери авторизации из-за редиректов.