Почему веб-клиент 1С зависает при загрузке через интернет и как это исправить?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый системный администратор или специалист 1С рано или поздно сталкивается с загадочной ситуацией: база отлично работает локально и в пределах офисной сети, но при попытке подключиться через интернет внешние пользователи получают ошибку «Выполнение запроса было прервано. Произошел временный сбой интернет-соединения». При этом зависание происходит стабильно на одном и том же месте — шкала загрузки доходит примерно до середины (около 50%), система задумывается на несколько секунд, после чего соединение разрывается.

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

Причина 1. Системы фильтрации трафика DPI и ТСПУ у провайдеров

Современные интернет-провайдеры активно внедряют системы глубокого анализа пакетов (DPI) и Технические средства противодействия угрозам (ТСПУ). Эти комплексы анализируют структуру проходящего трафика в реальном времени. Когда тонкий или веб-клиент 1С запускается через незащищенное соединение HTTP, платформа отправляет на сервер Apache или IIS объемные POST-запросы со структурами метаданных конфигурации.

Системы DPI могут ошибочно классифицировать этот специфический SOAP/OData трафик как нежелательный (например, путая его с инструментами обхода блокировок или p2p-протоколами) и принудительно разрывать TCP-сессию. Чтобы обойти это препятствие, нам необходимо скрыть структуру передаваемых данных от анализаторов.

Решение: Настройка SSL-шифрования (HTTPS)

Перевод веб-публикации 1С на защищенный протокол HTTPS — это самый надежный способ решить проблему с DPI. Шифрование оборачивает весь трафик в непрозрачный для систем фильтрации туннель, исключая возможность ложного срабатывания блокировок. Рассмотрим, как это сделать бесплатно:

  1. Выпустим бесплатный SSL-сертификат от центра сертификации Let's Encrypt. Для автоматического получения и продления сертификата в среде Windows удобно использовать утилиту wacs.exe (Win-ACME) или Certbot.
  2. Настроим веб-сервер Apache для работы по протоколу HTTPS. Для этого откроем конфигурационный файл httpd.conf и раскомментируем подключение модуля SSL и файла конфигурации виртуальных хостов:

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
  1. В файле httpd-ssl.conf укажем пути к полученным файлам сертификата и приватного ключа:

SSLEngine on
SSLCertificateFile "C:/ProgramData/win-acme/httpsacme/cert.pem"
SSLCertificateKeyFile "C:/ProgramData/win-acme/httpsacme/key.pem"
  1. Перезапустим службу Apache. Теперь подключение клиентов будет проходить в зашифрованном виде, что полностью нейтрализует влияние DPI на промежуточных узлах.

Причина 2. Проблема с размером MTU и фрагментацией пакетов

Вторая распространенная причина зависания загрузки на 50% кроется в сетевых настройках транспортного уровня, а именно в размере MTU (Maximum Transmission Unit). Провайдеры, предоставляющие доступ в интернет по протоколу PPPoE (очень часто это Ростелеком), принудительно уменьшают размер MTU до 1492 байт (вместо стандартных 1500 для обычного Ethernet-соединения).

При инициализации сессии 1С отправляет пакеты максимального размера. Если на каком-то промежуточном роутере установлен запрет фрагментации (флаг DF — Do not fragment), а пакет превышает размер MTU провайдера, роутер должен отбросить этот пакет и отправить обратно ICMP-сообщение «Packet Too Big» (механизм PMTUD). Если на сервере или роутере заблокирован протокол ICMP, отправитель никогда не узнает, почему пакет не дошел, и соединение «зависнет».

Решение: Корректировка MTU и MSS Clamping

Проанализируем ситуацию и настроим оптимальный размер пакета:

  1. Выясним максимальный размер проходящего пакета без фрагментации. Для этого на проблемном компьютере клиента запустим командную строку и выполним пинг сервера с явным указанием размера буфера и флага запрета фрагментации:

ping -f -l 1460 IP_вашего_сервера

Если получаем ошибку «Требуется фрагментация пакета», постепенно уменьшаем число 1460 (например, до 1420, 1380, 1360), пока пакеты не начнут успешно проходить.

  1. Если у нас есть доступ к роутеру клиента или сервера, настроим функцию TCP MSS Clamping (изменение максимального размера сегмента). На роутерах под управлением RouterOS (MikroTik) это можно сделать одной командой в терминале:

/ip firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
  1. Если настроить роутер нет возможности, уменьшим MTU непосредственно на сетевом адаптере компьютера проблемного пользователя. В командной строке от имени администратора выполним:

netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "Имя_Вашего_Подключения" mtu=1400 store=persistent

Причина 3. Неоптимальные таймауты веб-сервера Apache

Стандартные настройки тайм-аутов веб-сервера Apache рассчитаны на быструю отдачу статического веб-контента и могут закрывать соединение раньше времени, если у удаленного клиента нестабильный или медленный канал связи. Нам необходимо принудительно увеличить время ожидания ответов.

Решение: Тюнинг httpd.conf

Откроем конфигурационный файл нашего веб-сервера httpd.conf и скорректируем директивы, отвечающие за удержание соединений. Установим следующие параметры:


# Время в секундах, в течение которого Apache ожидает отправки и получения данных
Timeout 300

# Разрешаем постоянные соединения (Keep-Alive)
KeepAlive On

# Максимальное количество запросов в рамках одного соединения (0 - без ограничений)
MaxKeepAliveRequests 500

# Время ожидания следующего запроса в секундах
KeepAliveTimeout 60

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

Причина 4. Параметры времени жизни сессии в default.vrd

Файл публикации информационной базы default.vrd управляет поведением сессий платформы внутри веб-сервера. Если время жизни неактивной сессии слишком мало, она может закрыться прямо в процессе передачи тяжелых метаданных при первом старте.

Решение: Редактирование файла публикации

Перейдем в каталог, куда была выполнена публикация базы (например, C:\inetpub\wwwroot\MyBase или аналогичный каталог в Apache), найдем файл default.vrd, откроем его любым текстовым редактором и найдем узел <point>. Добавим или изменим параметры сессий:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/MyBase"
       ib="File="C:\Base1C";">
    <ws enable="true"/>
    <httpServices publishByDefault="true"/>
    <standardOData enable="true"/>
    <zones enable="false"/>
    <sessionMaxAge>1200</sessionMaxAge>
    <connectionTimeout>600</connectionTimeout>
</point>

Здесь параметр sessionMaxAge определяет максимальное время жизни сессии в секундах, а connectionTimeout задает интервал ожидания ответа от сервера приложений.

Причина 5. Проблемы с получением программных лицензий

Если зависание происходит сразу после успешной авторизации (ввода логина и пароля), система может находиться в поиске свободной лицензии 1С. Поиск HASP-ключей по умолчанию может выполняться с использованием широковещательных запросов, которые блокируются провайдерами в интернете. Веб-сервер ожидает ответа, время ожидания истекает, и сессия аварийно завершается.

Решение: Настройка раздачи лицензий сервером

Рассмотрим два шага для решения этой проблемы:

  1. В свойствах информационной базы на сервере 1С:Предприятия установим флажок «Разрешить выдачу лицензий сервером 1С:Предприятия». В этом случае клиенту не нужно будет искать ключ самостоятельно через интернет — сервер сам выдаст ему лицензию из своего пула.
  2. Если используется аппаратный ключ защиты, настроим файл nethasp.ini на сервере, где установлен Apache. Отключим широковещательный поиск (Broadcast) и жестко пропишем IP-адрес менеджера лицензий:

[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100 ; Укажите IP-адрес вашего менеджера лицензий
NH_USE_BROADCAST = Disabled

Причина 6. Использование режима «Низкая скорость соединения» на клиенте

Если удаленный пользователь работает через Тонкий клиент 1С, мы можем задействовать встроенные механизмы оптимизации трафика платформы. Для этого при редактировании настроек подключения к базе в списке баз перейдем на вкладку «Основные» и установим режим подключения «Низкая скорость соединения». В этом режиме платформа минимизирует количество транзакций с сервером при запуске и передает данные в сжатом виде, что значительно снижает вероятность разрыва связи из-за таймаутов.

← На главную