Каждый системный администратор или специалист 1С рано или поздно сталкивается с загадочной ситуацией: база отлично работает локально и в пределах офисной сети, но при попытке подключиться через интернет внешние пользователи получают ошибку «Выполнение запроса было прервано. Произошел временный сбой интернет-соединения». При этом зависание происходит стабильно на одном и том же месте — шкала загрузки доходит примерно до середины (около 50%), система задумывается на несколько секунд, после чего соединение разрывается.
Особенно странным выглядит то, что у клиентов одних провайдеров (например, Мегафон или Yota) всё запускается мгновенно, а у пользователей других (чаще всего Ростелеком или региональные кабельные операторы) база не загружается вообще. В этой статье мы подробно разберем, почему так происходит, проанализируем неочевидные сетевые нюансы и рассмотрим пошаговые методы решения этой проблемы.
Современные интернет-провайдеры активно внедряют системы глубокого анализа пакетов (DPI) и Технические средства противодействия угрозам (ТСПУ). Эти комплексы анализируют структуру проходящего трафика в реальном времени. Когда тонкий или веб-клиент 1С запускается через незащищенное соединение HTTP, платформа отправляет на сервер Apache или IIS объемные POST-запросы со структурами метаданных конфигурации.
Системы DPI могут ошибочно классифицировать этот специфический SOAP/OData трафик как нежелательный (например, путая его с инструментами обхода блокировок или p2p-протоколами) и принудительно разрывать TCP-сессию. Чтобы обойти это препятствие, нам необходимо скрыть структуру передаваемых данных от анализаторов.
Перевод веб-публикации 1С на защищенный протокол HTTPS — это самый надежный способ решить проблему с DPI. Шифрование оборачивает весь трафик в непрозрачный для систем фильтрации туннель, исключая возможность ложного срабатывания блокировок. Рассмотрим, как это сделать бесплатно:
wacs.exe (Win-ACME) или Certbot.httpd.conf и раскомментируем подключение модуля SSL и файла конфигурации виртуальных хостов:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
httpd-ssl.conf укажем пути к полученным файлам сертификата и приватного ключа:
SSLEngine on
SSLCertificateFile "C:/ProgramData/win-acme/httpsacme/cert.pem"
SSLCertificateKeyFile "C:/ProgramData/win-acme/httpsacme/key.pem"
Вторая распространенная причина зависания загрузки на 50% кроется в сетевых настройках транспортного уровня, а именно в размере MTU (Maximum Transmission Unit). Провайдеры, предоставляющие доступ в интернет по протоколу PPPoE (очень часто это Ростелеком), принудительно уменьшают размер MTU до 1492 байт (вместо стандартных 1500 для обычного Ethernet-соединения).
При инициализации сессии 1С отправляет пакеты максимального размера. Если на каком-то промежуточном роутере установлен запрет фрагментации (флаг DF — Do not fragment), а пакет превышает размер MTU провайдера, роутер должен отбросить этот пакет и отправить обратно ICMP-сообщение «Packet Too Big» (механизм PMTUD). Если на сервере или роутере заблокирован протокол ICMP, отправитель никогда не узнает, почему пакет не дошел, и соединение «зависнет».
Проанализируем ситуацию и настроим оптимальный размер пакета:
ping -f -l 1460 IP_вашего_сервера
Если получаем ошибку «Требуется фрагментация пакета», постепенно уменьшаем число 1460 (например, до 1420, 1380, 1360), пока пакеты не начнут успешно проходить.
/ip firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "Имя_Вашего_Подключения" mtu=1400 store=persistent
Стандартные настройки тайм-аутов веб-сервера Apache рассчитаны на быструю отдачу статического веб-контента и могут закрывать соединение раньше времени, если у удаленного клиента нестабильный или медленный канал связи. Нам необходимо принудительно увеличить время ожидания ответов.
Откроем конфигурационный файл нашего веб-сервера httpd.conf и скорректируем директивы, отвечающие за удержание соединений. Установим следующие параметры:
# Время в секундах, в течение которого Apache ожидает отправки и получения данных
Timeout 300
# Разрешаем постоянные соединения (Keep-Alive)
KeepAlive On
# Максимальное количество запросов в рамках одного соединения (0 - без ограничений)
MaxKeepAliveRequests 500
# Время ожидания следующего запроса в секундах
KeepAliveTimeout 60
После внесения изменений обязательно перезапустим службу веб-сервера для применения новых настроек.
Файл публикации информационной базы 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 задает интервал ожидания ответа от сервера приложений.
Если зависание происходит сразу после успешной авторизации (ввода логина и пароля), система может находиться в поиске свободной лицензии 1С. Поиск HASP-ключей по умолчанию может выполняться с использованием широковещательных запросов, которые блокируются провайдерами в интернете. Веб-сервер ожидает ответа, время ожидания истекает, и сессия аварийно завершается.
Рассмотрим два шага для решения этой проблемы:
nethasp.ini на сервере, где установлен Apache. Отключим широковещательный поиск (Broadcast) и жестко пропишем IP-адрес менеджера лицензий:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100 ; Укажите IP-адрес вашего менеджера лицензий
NH_USE_BROADCAST = Disabled
Если удаленный пользователь работает через Тонкий клиент 1С, мы можем задействовать встроенные механизмы оптимизации трафика платформы. Для этого при редактировании настроек подключения к базе в списке баз перейдем на вкладку «Основные» и установим режим подключения «Низкая скорость соединения». В этом режиме платформа минимизирует количество транзакций с сервером при запуске и передает данные в сжатом виде, что значительно снижает вероятность разрыва связи из-за таймаутов.