При работе с файловыми базами 1С:Предприятие через веб-сервер системные администраторы часто сталкиваются с проблемой производительности. Основная причина кроется в архитектуре: штатный модуль расширения 1С (wsap24.dll) в связке с файловым движком базы данных обрабатывает запросы последовательно. Чтобы обойти это ограничение и позволить нескольким пользователям работать параллельно без длительных ожиданий в очереди, эффективным решением является запуск нескольких независимых экземпляров (инстансов) Apache на разных портах. Рассмотрим подробно, как это реализовать и какие подводные камни могут возникнуть в процессе.
Проанализируем техническую сторону вопроса. Когда Apache работает с 1С, он загружает специальную библиотеку (модуль). В случае файловой базы данных (файл 1Cv8.1CDB), доступ к ней управляется компонентой dbeng8. Даже если сам Apache является многопоточным, модуль 1С внутри одного процесса часто создает узкое горлышко. Запуская несколько процессов Apache, мы заставляем операционную систему выделять под каждый экземпляр свои ресурсы и кванты времени. Каждый процесс имеет свой собственный загруженный экземпляр wsap24.dll, что позволяет более эффективно распределять нагрузку от пользователей. Фактически, мы создаем «ферму» из веб-серверов на одной машине.
Для чистоты настройки и исключения конфликтов ресурсов рекомендуется использовать раздельные папки для каждого экземпляра Apache. Выясним, как правильно организовать файлы:
C:\Apache241 и C:\Apache242.Основная ошибка при запуске второго экземпляра — это дублирование сетевых портов. Разберем, какие параметры необходимо изменить в файле conf\httpd.conf для каждого экземпляра.
Для первого экземпляра (C:\Apache241\conf\httpd.conf):
Define SRVROOT "/Apache241"
Listen 8001
ServerName localhost:8001
Для второго экземпляра (C:\Apache242\conf\httpd.conf):
Define SRVROOT "/Apache242"
Listen 8002
ServerName localhost:8002
Важный момент: Обратите внимание на переменную SRVROOT. Она должна точно указывать на физическое расположение конкретной копии Apache. Если оставить пути одинаковыми, второй экземпляр будет пытаться читать конфиги или логи первого, что приведет к ошибкам доступа.
Чаще всего запуск второго Apache прерывается ошибкой: (OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted. Это происходит потому, что по умолчанию во многих сборках включен модуль SSL, который пытается занять порт 443 на всех интерфейсах. Даже если вы не планируете использовать HTTPS, Apache попытается «забиндить» этот порт.
Разберем, как исправить эту ситуацию. Нам нужно заглянуть в дополнительные файлы конфигурации, которые подключаются через Include в основном httpd.conf. Обычно это conf/extra/httpd-ssl.conf или conf/extra/httpd-ahssl.conf.
Выполните одно из двух действий:
LoadModule ssl_module modules/mod_ssl.so и строку Include conf/extra/httpd-ssl.conf в главном конфиге.Пример правки в httpd-ssl.conf для второго экземпляра:
Listen 8003 https
<VirtualHost _default_:8003>
SSLEngine on
ServerName localhost:8003
...
</VirtualHost>
Чтобы экземпляры запускались автоматически, их нужно установить как службы Windows. Посмотрим на синтаксис команды установки. Здесь есть критически важный нюанс, связанный с тем, как платформа 1С ищет веб-серверы для публикации баз.
Рассмотрим команды для командной строки (запущенной от имени администратора):
C:\Apache241\bin\httpd.exe -k install -n "Apache 2.4" -f "C:\Apache241\conf\httpd.conf"
C:\Apache242\bin\httpd.exe -k install -n "Apache 2.4_Inst2" -f "C:\Apache242\conf\httpd.conf"
Внимание: Чтобы штатный помощник публикации 1С «увидел» веб-сервер, первая служба должна называться именно Apache 2.4. Если вы назовете её произвольно, например "MyApache_1", то при попытке опубликовать базу через конфигуратор 1С вы не увидите этот веб-сервер в списке доступных. Для последующих инстансов имена могут быть любыми, так как публикации для них чаще всего копируются вручную через правку файлов .vrd или просто копированием настроек из httpd.conf первого сервера.
Когда службы запущены, необходимо прописать загрузку модуля 1С. В каждом httpd.conf должна появиться строка, указывающая на актуальную версию платформы:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.X.XXXX/bin/wsap24.dll"
Затем добавляются описания публикаций. Пример стандартного блока для публикации:
Alias "/Base1" "C:/inetpub/wwwroot/Base1/"
<Directory "C:/inetpub/wwwroot/Base1/">
AllowOverride None
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/inetpub/wwwroot/Base1/default.vrd"
</Directory>
Проанализируем ситуацию с файлом default.vrd. Этот файл содержит параметры подключения к базе данных. Если вы запускаете несколько Apache для одной и той же базы, убедитесь, что путь к базе в .vrd файле идентичен для всех экземпляров. Однако сами папки публикаций (где лежат .vrd) лучше сделать раздельными или убедиться, что права доступа позволяют параллельное чтение этих файлов веб-серверами. Для удобного управления большим количеством файлов публикаций и настроек баз подойдёт инструмент для управления веб-публикациями 1С.
Для обеспечения максимальной производительности 1С на Windows, рекомендуется внести несколько правок в настройки MPM (Multi-Processing Module) в файле httpd.conf. Рассмотрим параметры mpm_winnt_module:
AcceptFilter http none
AcceptFilter https none
ThreadStackSize 8388608
При одновременной работе нескольких процессов Apache, использующих один и тот же модуль wsap24.dll, могут возникнуть коллизии во временных папках профиля пользователя. Чтобы этого избежать, мы можем переопределить переменные окружения для каждого процесса Apache прямо в конфигурационном файле:
SetEnv TEMP "C:/Apache241/temp"
SetEnv TMP "C:/Apache241/temp"
Не забудьте создать соответствующие папки на диске и дать права на запись пользователю, от имени которого запущены службы (обычно это SYSTEM или NETWORK SERVICE).
Мы рассмотрели процесс «размножения» экземпляров Apache 2.4. Этот метод позволяет эффективно распределить нагрузку при работе с файловыми базами 1С. Основные шаги включают копирование дистрибутива, строгую изоляцию портов (включая SSL) и корректное именование служб для взаимодействия с платформой 1С. Используя данный подход, вы сможете значительно повысить отзывчивость системы для конечных пользователей без перехода на клиент-серверный вариант работы базы данных на начальных этапах масштабирования. Для автоматизации всего процесса развертывания нескольких служб веб-сервера на разных портах можно использовать скрипт установки нескольких экземпляров Apache HTTP Server для Windows.