Как устранить зависание соединений в 1С:Базовая (файловая) при работе через Apache?

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

Организация удаленной работы с базами 1С — задача, с которой сталкиваются многие системные администраторы. Особую сложность вызывает сценарий, когда необходимо обеспечить веб-доступ к базовым версиям 1С в файловом варианте. Часто это делается из соображений экономии: покупается один мощный компьютер, на нем разворачивается веб-сервер (Apache или IIS), и пользователи подключаются к своим базам через браузер.

Однако на практике такая схема часто дает сбой: соединения "подвисают", пользователи не могут войти в базу, получая ошибки о блокировке или превышении лимита сеансов. Давайте подробно разберем, почему это происходит, проанализируем архитектурные ограничения и рассмотрим конкретные технические решения для стабилизации работы.

Суть проблемы: конфликт архитектуры и лицензирования

Прежде чем приступать к правке конфигурационных файлов, нам необходимо четко понимать причину проблемы. В обсуждаемой ситуации мы имеем дело с 1С:Базовая версия.

Главное ограничение базовой версии — возможность работы только одного пользователя (один активный сеанс) одновременно. Когда мы публикуем базу на веб-сервере, происходит следующее:

  1. Пользователь открывает браузер и заходит в базу. Веб-сервер создает сеанс.
  2. Пользователь закрывает вкладку браузера (не нажимая кнопку "Завершить работу").
  3. Для браузера и веб-сервера соединение может считаться завершенным или приостановленным, но сеанс 1С на стороне веб-сервера продолжает жить в течение времени жизни (Time To Live), ожидая возвращения пользователя.
  4. Пользователь пытается зайти снова. Платформа 1С видит, что старый сеанс еще активен ("висит"). Поскольку в базовой версии разрешен только один сеанс, новый вход блокируется. В таких случаях администратору часто требуется инструмент для принудительного завершения работы пользователей, чтобы оперативно освободить базу.

Кроме того, в файловом варианте работы веб-сервер Apache (процесс httpd.exe) напрямую захватывает файлы базы данных. Если процесс зависает, файлы блокировок (*.cdn, *.cLck) не удаляются, и база становится недоступной до перезагрузки службы Apache.

Решение 1: Отключение регламентных заданий

Это, пожалуй, самый важный шаг для файловых баз, опубликованных на веб-сервере, особенно если их много (в теме упоминается 30 баз). Рассмотрим почему это важно.

В файловом варианте "сервером" выступает само клиентское приложение. Когда пользователь входит в базу, платформа пытается запустить фоновые процессы (обновление полнотекстового поиска, загрузка курсов валют и т.д.). Для базовой версии запуск фонового задания — это попытка создания второго сеанса. Первый сеанс занят пользователем, второй пытается занять фоновое задание -> возникает конфликт блокировок.

Мы должны принудительно отключить запуск регламентных заданий через веб-сервер. Сделаем это через файл публикации default.vrd. Для анализа и ручного управления списком задач удобно использовать консоль регламентных и фоновых заданий.

Откроем файл default.vrd для конкретной базы в текстовом редакторе и найдем (или добавим) секцию управления заданиями. Нам нужно установить атрибут enable в значение false.


<point name="JobService"
    alias="ws1.1cws"
    enable="false"
    reuseSessions="dontuse"
    sessionMaxAge="20"
    poolSize="10"
    poolTimeout="5"/>

Обратите внимание на параметр reuseSessions="dontuse". Для базовых версий рекомендуется запретить переиспользование сеансов (или использовать с осторожностью), так как "залипший" сеанс гарантированно блокирует работу.

Решение 2: Тонкая настройка Apache (httpd.conf)

Стандартные настройки Apache не оптимизированы для работы с 1С Предприятием. Если мы используем Apache, нам необходимо отредактировать файл конфигурации httpd.conf. Если же вы планируете расширять возможности интеграции, изучите особенности публикации HTTP сервисов через Apache с использованием SSL сертификата.

Давайте внесем изменения, которые помогут стабильнее управлять соединениями:

  1. KeepAlive On. Этот параметр должен быть включен. 1С требует постоянного соединения.
  2. KeepAliveTimeout. Увеличим время ожидания. По умолчанию оно может быть очень коротким. Для стабильной работы тонкого клиента через веб рекомендуем увеличить значение.
  3. MaxKeepAliveRequests. Установим в 0 (неограниченно), чтобы сервер принудительно не разрывал соединение после определенного числа запросов.

Пример настроек в httpd.conf:


KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 100

Также для Windows-систем часто помогает добавление директивы, исправляющей работу с сетевыми сокетами:


<IfModule mpm_winnt_module>
    Win32DisableAcceptEx
</IfModule>

Решение 3: Использование Тонкого клиента вместо браузера

Работа через браузер (Web-клиент) потребляет больше ресурсов и менее стабильно управляет закрытием сеансов по сравнению с Тонким клиентом.

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

Преимущества такого подхода:

Адрес подключения в Тонком клиенте будет таким же, как и в браузере: http://ip-адрес-сервера/имя_базы.

Решение 4: Переход на IIS (Internet Information Services)

Если Apache продолжает вести себя нестабильно, имеет смысл рассмотреть переход на IIS, который встроен в Windows. Для сценария с большим количеством баз (как в обсуждении — 30 штук) IIS имеет существенное преимущество — Пулы приложений (Application Pools).

В Apache перезагрузка службы перезапускает веб-сервер целиком, обрывая сеансы всех пользователей во всех базах. В IIS мы можем настроить отдельный пул приложений для каждой базы (или группы баз).

Как это помогает:

Решение 5: Автономный сервер (для платформы 8.3.22 и выше)

Начиная с версии 8.3.22, 1С представила Автономный сервер. Это возможность запускать файловую базу как сервис, доступный по протоколу HTTP, без необходимости установки Apache или IIS.

Однако в контексте обсуждаемой темы (30 баз на 16 ГБ ОЗУ) этот вариант нужно применять с осторожностью. Каждый экземпляр автономного сервера — это отдельный процесс ОС, который потребляет оперативную память (от 150-200 МБ в простое). Запуск 30 таких процессов может полностью исчерпать ресурсы сервера.

Фундаментальное решение: Апгрейд лицензий

Необходимо понимать, что описанные выше методы — это "костыли" для попытки заставить работать архитектуру, которая для этого не предназначена. Базовая версия создана для локальной работы одного человека. Работа 30 пользователей в 30 разных базах на одном хосте создает огромную нагрузку на дисковую подсистему и процессор из-за особенностей файлового режима.

Правильный путь развития системы:

  1. Переход с Базовых версий на ПРОФ. Это снимет ограничение на количество сеансов и позволит использовать COM-соединения и внешние обработки без блокировок.
  2. Приобретение лицензии на Сервер 1С:Предприятия (Мини). Лицензия на сервер МИНИ (до 5 подключений) стоит значительно дешевле полноценной лицензии, но позволяет перевести базы в клиент-серверный вариант (SQL).
  3. Использование бесплатной СУБД PostgreSQL.

Клиент-серверная архитектура (даже в варианте Мини) полностью решает проблему "повисших" файловых блокировок, так как работой с базой данных управляет процесс rphost, а не веб-сервер напрямую.

Резюме

Если апгрейд невозможен по бюджету, выполним следующие действия в строгом порядке:

  1. Отключим регламентные задания во всех файлах default.vrd.
  2. Настроим KeepAlive в Apache и увеличим таймауты.
  3. Переведем пользователей на работу через Тонкий клиент.
← На главную