При администрировании систем на базе 1С часто возникает ситуация, когда на одном сервере необходимо опубликовать базы, работающие на разных версиях платформы. Например, одна база требует стабильной версии 8.3.18, а новая конфигурация уже запущена на 8.3.25. В этой статье мы разберем подробно, почему стандартная установка Apache не позволяет сделать это «из коробки», и проанализируем проверенные способы решения этой задачи.
Для начала выясним причину технического ограничения. Когда мы публикуем базу 1С на веб-сервере, в файл конфигурации Apache (httpd.conf) добавляется директива LoadModule, которая загружает библиотеку расширения 1С (например, wsap24.dll для Windows или mod_ws24.so для Linux). Эта директива является глобальной. Это означает, что модуль загружается в адресное пространство процесса Apache один раз при его старте.
Поскольку разные версии 1С используют свои специфические модули расширения, которые часто имеют идентичные названия функций внутри, попытка загрузить два разных модуля 1С в один процесс приведет к конфликту или нестабильной работе. Система просто не поймет, какую версию библиотеки использовать для обработки конкретного запроса. Поэтому нам необходимо рассмотреть архитектурные обходные пути.
Это самый надежный и классический способ. Если нам нужно две версии 1С, мы просто создадим два независимых экземпляра сервера Apache, каждый из которых будет слушать свой порт и работать со своим модулем 1С. Рассмотрим алгоритм действий для ОС Windows.
Шаг 1: Подготовка каталогов. Нам нужно создать отдельные папки для конфигураций. Допустим, у нас уже установлен Apache в папку по умолчанию. Мы можем создать дополнительные папки для конфигурационных файлов, например C:\Apache24\conf_v8318 и C:\Apache24\conf_v8325.
Шаг 2: Регистрация новых служб. Вместо использования одной службы, мы зарегистрируем несколько через командную строку. Проанализируем пример команды:
httpd.exe -k install -n "Apache_1C_8_3_18" -f "C:\Apache24\conf_v8318\httpd.conf"
httpd.exe -k install -n "Apache_1C_8_3_25" -f "C:\Apache24\conf_v8325\httpd.conf"
Здесь флаг -n задает уникальное имя службы, а -f указывает на конкретный файл конфигурации. Теперь в системе будет две службы, которыми можно управлять независимо.
Шаг 3: Настройка портов и модулей. В каждом файле httpd.conf необходимо изменить порт (директива Listen) и путь к модулю 1С. Например:
В первом файле:
Listen 8081
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.18.1234/bin/wsap24.dll"
Во втором файле:
Listen 8082
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.25.5678/bin/wsap24.dll"
Важный момент: при публикации баз через конфигуратор или утилиту webinst, нужно следить за тем, в какой именно файл конфигурации вносятся изменения.
Если нам неудобно заставлять пользователей вводить номера портов в адресной строке (например, myserver:8081), мы можем использовать Nginx как «входную дверь» для всех запросов. Это современный и наиболее гибкий подход.
Посмотрим на схему работы:
http://server.com/base_old./base_old, перенаправляет его локально на Apache, работающий на порту 8081.http://server.com/base_new Nginx перенаправляет трафик на Apache с портом 8082.Рассмотрим пример настройки секции server в конфигурации Nginx:
server {
listen 80;
server_name 1c.company.ru;
location /base_old/ {
proxy_pass http://127.0.0.1:8081/base_old/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /base_new/ {
proxy_pass http://127.0.0.1:8082/base_new/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Такая связка позволяет скрыть внутреннюю сложность системы от конечного пользователя и обеспечить высокую стабильность работы.
Проанализируем более продвинутый метод — использование Docker. Это решение идеально подходит для крупных компаний или отделов разработки. В данном случае каждая версия 1С и свой экземпляр Apache упаковываются в отдельный контейнер.
Преимущества этого подхода:
При работе с несколькими версиями платформы критически важно правильно настроить файл .vrd (Virtual Resource Descriptor). Выясним, на какие параметры стоит обратить внимание. В файле публикации есть атрибут ib, который определяет строку соединения.
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/base_new"
ib="Srvr="1C_SERVER";Ref="base_new";">
</point>
Хотя сам файл .vrd универсален, именно веб-сервер (Apache), в который он загружен, определяет, какая версия платформы будет обрабатывать запрос к серверу приложений 1С. Помните, что версия платформы на веб-сервере и версия сервера приложений 1С обязаны совпадать в рамках одного соединения.
В Linux-системах нам не обязательно копировать бинарные файлы самого Apache. Мы можем создать несколько юнитов в systemd, каждый из которых будет запускать httpd с разным окружением. Главное здесь — переменная LD_LIBRARY_PATH. Для каждого процесса Apache мы можем указать свой путь к библиотекам 1С, что позволит избежать конфликтов на уровне операционной системы.
Мы выяснили, что напрямую один процесс Apache не может работать с двумя версиями 1С из-за ограничений загрузки модулей. Однако, используя разделение служб по портам или проксирование через Nginx, можно создать стабильную и масштабируемую инфраструктуру. Выбор метода зависит от ваших задач: для простой настройки подойдет создание второй службы Apache, а для профессиональной эксплуатации лучше смотреть в сторону Nginx или Docker.