В практике администрирования систем на базе «1С:Предприятие» часто возникает задача разграничения доступа к информационной базе для различных категорий пользователей или внешних систем. Например, нам может потребоваться сделать так, чтобы мобильное приложение подключалось к базе через порт 8080, интеграционная шина обменивалась данными через порт 8081, а обычные пользователи работали в тонком клиенте через стандартный порт 80 (или безопасный 443).
Стандартный диалог публикации в Конфигураторе 1С не позволяет гибко распределять публикации по разным портам в рамках одного веб-сервера. Однако эту задачу можно легко решить с помощью тонкой настройки конфигурационных файлов веб-сервера Apache. В этой статье мы подробно разберем, как настроить работу нескольких публикаций 1С на разных портах, используя всего один запущенный экземпляр Apache.
Прежде чем перейти к технической части, давайте разберем, почему простого разделения по разным URL-путям (например, /base/hs/service1 и /base/hs/service2) в рамках одного порта бывает недостаточно:
8080 открыть для всего интернета, а порт 8081 сделать доступным только для определенных IP-адресов внутри VPN.default.vrd. Разделяя публикации, мы можем тонко настраивать пул соединений, управление сеансами и состав доступных веб- и HTTP-сервисов для каждого порта в отдельности.Разберем по шагам, как реализовать эту схему на практике.
По умолчанию веб-сервер Apache слушает только один порт (как правило, порт 80 для HTTP или 443 для HTTPS). Наша первая задача — указать серверу, что он должен принимать входящие соединения на всех необходимых нам портах.
Для этого нам нужно отредактировать конфигурационный файл Apache. В операционной системе Windows он обычно называется httpd.conf и располагается в папке установки веб-сервера (например, C:\Apache24\conf\httpd.conf). В Linux-системах настройки портов чаще всего выносятся в отдельный файл /etc/apache2/ports.conf.
Откроем конфигурационный файл текстовым редактором и найдем директиву Listen. Добавим под ней строки с указанием дополнительных портов, которые мы планируем использовать. Предположим, мы хотим задействовать порты 8080 и 8081:
Listen 80
Listen 8080
Listen 8081
После сохранения файла веб-сервер Apache при перезапуске начнет «слушать» эти сетевые порты, однако пока он не знает, как обрабатывать запросы, поступающие на них. Для этого нам потребуется настроить виртуальные хосты.
Чтобы разделить настройки для разных портов, нам понадобятся разные файлы конфигурации публикации 1С (файлы с расширением .vrd). Каждый такой файл должен лежать в отдельной папке на диске сервера. Создадим на сервере две директории, например:
C:\Apache24\pub1c\service1\ — здесь будут лежать настройки для первого порта (8080);C:\Apache24\pub1c\service2\ — здесь будут настройки для второго порта (8081).Механизм виртуальных хостов позволяет веб-серверу распределять входящие запросы в зависимости от того, на какой порт или доменное имя они пришли. Мы свяжем каждый порт с определенной папкой публикации, которую создали на предыдущем шаге.
В конце файла httpd.conf добавим блоки настроек <VirtualHost>. Обратите внимание, что загрузка модуля расширения веб-сервера 1С (директива LoadModule) должна осуществляться один раз вне блоков виртуальных хостов, на глобальном уровне конфигурации.
Проанализируем пример конфигурации:
# Подключение модуля 1С (укажите путь к актуальной версии платформы на вашем сервере)
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.23.1865/bin/wsap24.dll"
# Настройка виртуального хоста для Порта 8080
<VirtualHost *:8080>
ServerName localhost:8080
# Задаем имя публикации в URL (например, http://localhost:8080/base_port1)
Alias "/base_port1" "C:/Apache24/pub1c/service1/"
<Directory "C:/Apache24/pub1c/service1/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/Apache24/pub1c/service1/default.vrd"
</Directory>
</VirtualHost>
# Настройка виртуального хоста для Порта 8081
<VirtualHost *:8081>
ServerName localhost:8081
# Задаем имя публикации для второго порта (например, http://localhost:8081/base_port2)
Alias "/base_port2" "C:/Apache24/pub1c/service2/"
<Directory "C:/Apache24/pub1c/service2/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/Apache24/pub1c/service2/default.vrd"
</Directory>
</VirtualHost>
В этой конфигурации мы четко указали Apache: при поступлении запроса на порт 8080 по пути /base_port1 нужно использовать обработчик 1С и читать файл конфигурации default.vrd из первой папки. При обращении на порт 8081 по пути /base_port2 — использовать настройки из второй папки.
Теперь перейдем к конфигурации самой платформы 1С. В каждой из созданных нами папок должен находиться файл default.vrd. Это обычный XML-файл, описывающий параметры подключения к базе и состав публикуемых сервисов.
Вы можете сгенерировать такой файл автоматически, выполнив стандартную публикацию базы из Конфигуратора 1С в любую временную папку, а затем скопировав полученный файл default.vrd в наши рабочие директории C:\Apache24\pub1c\service1\ и C:\Apache24\pub1c\service2\.
Рассмотрим структуру файла default.vrd для разграничения веб-сервисов одной и той же информационной базы. Строка соединения с базой (атрибут ib или connect) в обоих файлах будет абсолютно одинаковой, так как мы работаем с одной базой данных.
Пример файла default.vrd для первого порта (8080), где мы разрешаем работу только веб-сервиса MobileExchange:
<?xml version="1.0" encoding="UTF-8"?>
<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_port1"
ib="Srvr="1C-SERVER";Ref="work_db";">
<ws>
<!-- Разрешаем публикацию только нужного веб-сервиса -->
<point name="MobileExchange" alias="mobile.1cws" publish="true"/>
<point name="ExternalIntegration" alias="integration.1cws" publish="false"/>
</ws>
<httpServices publishByDefault="false">
<!-- Все HTTP-сервисы по умолчанию отключены на этом порту -->
</httpServices>
</point>
А во втором файле default.vrd (для порта 8081) мы настроим противоположную схему: отключим мобильный обмен и включим сервис интеграции:
<?xml version="1.0" encoding="UTF-8"?>
<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_port2"
ib="Srvr="1C-SERVER";Ref="work_db";">
<ws>
<point name="MobileExchange" alias="mobile.1cws" publish="false"/>
<point name="ExternalIntegration" alias="integration.1cws" publish="true"/>
</ws>
<httpServices publishByDefault="true">
<!-- Разрешаем все HTTP-сервисы на этом порту -->
</httpServices>
</point>
После внесения изменений обязательно перезапустите службу веб-сервера Apache через консоль администрирования или службу Windows Services, чтобы применить новые параметры.
При реализации данной схемы настройки крайне важно учитывать несколько технических ограничений работы веб-компонентов 1С:
1. Конфигуратор 1С может сломать ручные настройки.
Если в будущем вы или другой администратор откроете Конфигуратор 1С этой базы и выполните стандартную публикацию через меню Администрирование -> Публикация на веб-сервере, платформа перезапишет ваш файл httpd.conf, удалив оттуда все блоки <VirtualHost> и настройки портов.
Решение: Все последующие изменения в файлы публикации вносите исключительно вручную через редактирование файлов default.vrd. Запретите использование автоматической публикации из Конфигуратора для этой базы.
2. Ограничение на версию платформы 1С.
В рамках одного процесса Apache может быть загружена только одна библиотека расширения 1С (файл wsap24.dll или wsap24.so в зависимости от ОС). Это означает, что все публикации на разных портах, настроенные через виртуальные хосты в одном конфигурационном файле Apache, обязаны работать на одной и той же версии платформы 1С.
Если вам требуется запустить одну базу на платформе 8.3.21, а другую на 8.3.25, этот метод не подойдет. В таком случае потребуется устанавливать и запускать два полностью независимых экземпляра службы Apache на сервере, каждый со своими портами и своей версией библиотеки 1С.
Если инфраструктура разрастается, управление большим количеством виртуальных хостов и SSL-сертификатов непосредственно в Apache может стать трудоемким. Более надежным и современным архитектурным подходом считается связка Nginx + Apache.
В такой схеме:
8080 для всех публикаций 1С).Мы подробно разобрали, как решить задачу публикации баз 1С на разных портах силами одного сервера Apache. Этот метод обеспечивает высокую гибкость в настройке интеграций и защите корпоративных данных.