Работа тонких клиентов 1С через веб-сервер Apache — это стандартная практика для территориально распределенных компаний. Однако часто системные администраторы сталкиваются с проблемой «залипания» или полных зависаний сессий. Пользователи жалуются на то, что программа перестает отвечать, а помогает только перезапуск службы Apache. В этой статье мы подробно разберем, почему это происходит и как настроить сервер для стабильной работы.
Веб-сервер Apache на операционных системах семейства Windows работает иначе, чем в Linux. Он использует модуль mpm_winnt, который создает один управляющий процесс и один рабочий процесс, внутри которого запускается множество потоков. По умолчанию настройки Apache часто не рассчитаны на интенсивную нагрузку, которую создает 1С.
Разберем основные параметры в файле httpd.conf (или в подключаемом файле extra/httpd-mpm.conf), которые нам необходимо изменить:
Пример настройки блока в конфигурационном файле:
<IfModule mpm_winnt_module>
ThreadsPerChild 1000
MaxRequestsPerChild 3000
</IfModule>
Одной из самых коварных причин зависаний на Windows Server является механизм AcceptEx. Это оптимизация передачи сокетов от операционной системы к веб-серверу. К сожалению, она часто конфликтует с антивирусами, брандмауэрами и драйверами сетевых карт, что приводит к тому, что запрос «зависает» на сетевом уровне, так и не дойдя до 1С.
Выясним, как это отключить. Нам нужно добавить в самый конец файла httpd.conf следующие строки:
AcceptFilter http none
AcceptFilter https none
После внесения этих изменений обязательно перезапустим службу Apache. Это отключит специфические оптимизации Windows, которые в 90% случаев являются причиной необъяснимых «фризов» тонкого клиента.
Современные версии Windows Server (2008 R2, 2012, 2016, 2019) по умолчанию пытаются переложить часть работы по обработке сетевых пакетов на процессор сетевой карты. Это называется «разгрузкой TCP». При работе с длинными HTTP-запросами 1С это часто вызывает микро-разрывы соединений.
Рассмотрим команды, которые необходимо выполнить в командной строке (CMD) от имени администратора для стабилизации сетевого стека:
netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
netsh int tcp set global netdma=disabled
Эти действия отключают аппаратную обработку TCP-пакетов, заставляя операционную систему брать эту задачу на себя. Это повышает стабильность передачи данных между тонким клиентом и сервером Apache.
При публикации информационной базы 1С создается файл default.vrd. В нем содержатся критически важные параметры пула соединений. Если размер пула слишком мал, новые запросы от пользователей будут ждать очереди, что визуально выглядит как зависание программы.
Найдем и отредактируем параметры в блоке <pool>:
Пример корректной настройки в default.vrd:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
base="/BaseName"
ib="Srvr=Server1C;Ref=BaseName;">
<pool size="100" timeout="20"/>
</point>
Иногда задержки возникают из-за того, что Apache пытается сначала разрешить адрес через протокол IPv6, а только после тайм-аута переходит на IPv4. Рекомендуется явно указать Apache слушать только конкретный IPv4-адрес вашего сервера.
В файле httpd.conf найдем строку Listen 80 и заменим её на:
Listen 192.168.1.10:80
(где 192.168.1.10 — IP вашего сервера).
Также обратим внимание на параметр KeepAlive. Этот механизм позволяет держать соединение открытым для нескольких запросов. В условиях нестабильного интернета (как у удаленных офисов) слишком долгий KeepAliveTimeout может привести к «забиванию» потоков Apache мертвыми сессиями. Попробуем установить его в значение 2–3 секунды или вовсе отключить для теста:
KeepAlive Off
Если после всех настроек Apache продолжает вести себя нестабильно на Windows Server, стоит рассмотреть переход на Internet Information Services (IIS). Поскольку IIS является «родным» компонентом Windows, он зачастую работает стабильнее и лучше управляет ресурсами памяти и сетевыми сокетами именно в этой ОС. Платформа 1С официально поддерживает работу с IIS, и процесс публикации базы там практически не отличается от Apache.
Если проблема сохраняется, нам необходимо заглянуть в error.log веб-сервера Apache. Ищем следующие маркеры:
ThreadsPerChild.AcceptFilter none.Помните, что комплексный подход — обновление платформы 1С до последних релизов (например, выше 8.3.16.1148), переход на Apache 2.4 и тонкая настройка параметров Windows — позволит вам добиться стабильной работы тонких клиентов без ежедневных перезагрузок сервера.