При развертывании инфраструктуры 1С:Предприятие часто возникает потребность в изоляции различных информационных баз или разделении нагрузки. Одним из эффективных способов решения этой задачи является запуск нескольких экземпляров веб-сервера Apache на одной физической или виртуальной машине. Однако стандартные инструменты 1С, такие как диалог публикации в Конфигураторе, часто не рассчитаны на работу с нестандартными именами служб или несколькими путями установки. В этой статье мы подробно разберем, как преодолеть эти ограничения и настроить стабильную работу нескольких серверов Apache.
Проанализируем ситуацию, с которой сталкивается большинство администраторов. При установке второго экземпляра Apache мы вынуждены менять имя службы (например, на Apache2.4_81), так как в системе не может быть двух служб с одинаковым именем. Платформа 1С при попытке публикации через графический интерфейс выполняет поиск в системном реестре Windows по строго определенному пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache2.4.
Если ваша служба называется иначе, Конфигуратор выдает ошибку «Веб-серверы не обнаружены». Кроме того, автоматический поиск ищет конфигурационный файл httpd.conf в стандартных папках программ. Чтобы обойти это ограничение, нам придется использовать ручные методы настройки или специализированные утилиты командной строки.
Этот метод считается самым простым и безопасным, так как позволяет использовать визуальные инструменты 1С для генерации правильных настроек, которые затем переносятся в нужный экземпляр сервера. Рассмотрим этот процесс по шагам:
httpd.conf вашего первого экземпляра Apache.C:\BASES\BASE2_WEB). Выполните публикацию второй базы в эту папку, временно используя первый (работающий) веб-сервер. В результате в папке появится файл default.vrd, который содержит все необходимые параметры подключения к базе 1С.httpd.conf первого сервера и найдите в самом конце блок, добавленный платформой 1С. Он выглядит примерно так:
# 1c publication
Alias "/Base1" "C:/BASES/BASE1_WEB/"
<Directory "C:/BASES/BASE1_WEB/">
AllowOverride None
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/BASES/BASE1_WEB/default.vrd"
</Directory>
httpd.conf второго сервера (который работает на порту 81), заменив пути и псевдонимы (Alias) на соответствующие второй базе.LoadModule должна указывать на корректную библиотеку wsap24.dll в папке bin нужной версии платформы.Для автоматизации процесса, особенно когда веб-серверов много, рекомендуется использовать штатную утилиту 1С — webinst. Она позволяет выполнить публикацию без открытия Конфигуратора, передав все параметры через командную строку. Разберем пример команды для публикации на втором экземпляре Apache:
webinst -publish -apache24 -wsdir Base2 -dir "C:\BASES\BASE2_WEB" -connstr "File=""C:\BASES\BASE2"";" -confpath "C:\APACHE\Apache24_81\conf\httpd.conf"
Рассмотрим ключевые параметры этой команды:
-publish: команда на выполнение публикации.-apache24: указание типа веб-сервера.-wsdir: имя виртуального каталога, который будет использоваться в URL (например, http://localhost:81/Base2).-dir: физический путь к папке, где будет лежать файл default.vrd.-connstr: строка соединения с базой данных (в данном случае файловой).-confpath: самый важный параметр — прямой путь к файлу конфигурации конкретного экземпляра Apache, в который нужно внести изменения.После выполнения этой команды необходимо вручную перезапустить службу соответствующего экземпляра Apache через консоль services.msc или командную строку:
net stop Apache2.4_81
net start Apache2.4_81
Разберем подробнее аспекты, которые часто упускаются из виду, но критически важны для стабильной работы.
1. Соответствие разрядности (Bitness)
Проанализируем частую ошибку: использование 64-битного сервера Apache с 32-битной платформой 1С (или наоборот). Библиотека расширения wsap24.dll должна иметь ту же разрядность, что и исполняемый файл httpd.exe. Если вы используете x64 версию веб-сервера, модуль нужно брать из каталога C:\Program Files\1cv8\номер_версии\bin. Если x86 — из C:\Program Files (x86)\1cv8\номер_версии\bin.
2. Права доступа
Выясним, под каким пользователем запускаются ваши службы. По умолчанию это LocalSystem. У этой учетной записи должны быть права «Чтение и выполнение» на папку bin платформы 1С и полные права на папку с данными информационной базы (если она файловая) и папку с публикацией (где лежит default.vrd).
3. Изоляция процессов через MPM-модули
Рассмотрим ситуацию, когда Apache «падает» или зависает. В среде Windows Apache использует модуль mpm_winnt. По умолчанию он создает один процесс с множеством потоков. Если один поток (запрос к 1С) вызывает критическую ошибку, может упасть весь процесс. Для повышения стабильности при работе с несколькими базами можно настроить параметры в httpd.conf:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 0
</IfModule>
Увеличение ThreadsPerChild позволяет обрабатывать больше одновременных подключений, а настройка MaxConnectionsPerChild (если установить значение больше 0) заставит процесс перезапускаться после обработки определенного количества запросов, что помогает бороться с утечками памяти.
Вместо того чтобы заставлять пользователей вводить порты (80, 81, 8080), рассмотрим более профессиональное решение. Вы можете оставить один Apache на 80 порту в качестве «входных ворот» (Proxy), который будет перенаправлять запросы на другие экземпляры или даже другие серверы.
Для этого в основном httpd.conf нужно включить модули proxy_module и proxy_http_module, а затем настроить проксирование:
ProxyPass "/base2" "http://localhost:81/base2"
ProxyPassReverse "/base2" "http://localhost:81/base2"
В этом случае пользователи всегда будут обращаться по стандартному адресу http://server-name/base2, а ваш сервер сам перенаправит трафик на внутренний порт 81. Это значительно упрощает администрирование и настройку клиентских мест.
Подведем итог. Чтобы успешно запустить два Apache на одном ПК, необходимо:
httpd.exe -k install -n "ИмяСлужбы".Listen каждого конфига.<Directory>, либо через webinst с явным указанием пути к нужному httpd.conf.Следуя этим инструкциям, вы сможете создать гибкую и отказоустойчивую среду для работы веб-сервисов 1С.