Как запустить несколько экземпляров Apache 2.4 для работы с файловыми базами 1С

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

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

Зачем «размножать» Apache для 1С?

Проанализируем техническую сторону вопроса. Когда Apache работает с 1С, он загружает специальную библиотеку (модуль). В случае файловой базы данных (файл 1Cv8.1CDB), доступ к ней управляется компонентой dbeng8. Даже если сам Apache является многопоточным, модуль 1С внутри одного процесса часто создает узкое горлышко. Запуская несколько процессов Apache, мы заставляем операционную систему выделять под каждый экземпляр свои ресурсы и кванты времени. Каждый процесс имеет свой собственный загруженный экземпляр wsap24.dll, что позволяет более эффективно распределять нагрузку от пользователей. Фактически, мы создаем «ферму» из веб-серверов на одной машине.

Шаг 1. Подготовка структуры каталогов

Для чистоты настройки и исключения конфликтов ресурсов рекомендуется использовать раздельные папки для каждого экземпляра Apache. Выясним, как правильно организовать файлы:

  1. Скачайте архив Apache 2.4 (например, с сайта ApacheHaus или ApacheLounge).
  2. Распакуйте его в корневой каталог диска в разные папки, например: C:\Apache241 и C:\Apache242.
  3. В каждой папке будет находиться полная копия веб-сервера. Это позволит нам независимо обновлять или изменять конфигурацию каждого узла.

Шаг 2. Настройка конфигурационных файлов (httpd.conf)

Основная ошибка при запуске второго экземпляра — это дублирование сетевых портов. Разберем, какие параметры необходимо изменить в файле 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. Если оставить пути одинаковыми, второй экземпляр будет пытаться читать конфиги или логи первого, что приведет к ошибкам доступа.

Шаг 3. Устранение конфликта портов SSL

Чаще всего запуск второго 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.

Выполните одно из двух действий:

  1. Полное отключение SSL: Закомментируйте строку LoadModule ssl_module modules/mod_ssl.so и строку Include conf/extra/httpd-ssl.conf в главном конфиге.
  2. Разнесение портов SSL: Если шифрование необходимо, измените порт 443 на уникальный для каждого инстанса (например, 8003, 8004 и так далее).

Пример правки в httpd-ssl.conf для второго экземпляра:


Listen 8003 https
<VirtualHost _default_:8003>
    SSLEngine on
    ServerName localhost:8003
    ...
</VirtualHost>

Шаг 4. Регистрация служб в Windows

Чтобы экземпляры запускались автоматически, их нужно установить как службы 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 первого сервера.

Шаг 5. Особенности публикации 1С

Когда службы запущены, необходимо прописать загрузку модуля 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:

  1. ThreadsPerChild: Определяет количество потоков. Для 1С рекомендуется устанавливать значение от 150 до 500, в зависимости от нагрузки.
  2. AcceptFilter: В среде Windows часто возникают проблемы с сетевыми оптимизациями. Добавьте следующие строки для стабилизации соединений:
    
    AcceptFilter http none
    AcceptFilter https none
    
  3. ThreadStackSize: 1С может потреблять значительный объем стека при выполнении тяжелых запросов. Рекомендуется увеличить его: 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.

← На главную