При настройке интеграции 1С с внешними системами, например, с телефонией или мобильными приложениями, часто возникает задача разделить потоки доступа. Для обычных пользователей требуется стандартная авторизация с выбором имени и вводом пароля, а для сервисов телефонии или чат-ботов необходим автоматический вход под конкретной учетной записью. Если пытаться совместить эти настройки в одной публикации, возникает конфликт: либо пользователям приходится каждый раз перевыбирать логин, либо внешняя система не может авторизоваться. В данной статье мы рассмотрим, как создать две и более независимые публикации для одной информационной базы на одном веб-сервере Apache.
Для начала проанализируем ситуацию: почему Конфигуратор 1С в меню «Публикация на веб-сервере» отображает только одну запись? Это происходит потому, что стандартный графический интерфейс предназначен для быстрого развертывания одной точки доступа. Однако работа веб-сервера Apache строится на конфигурационных файлах. Когда мы нажимаем кнопку «Опубликовать», 1С выполняет два действия:
default.vrd в указанном каталоге (в нем хранятся параметры подключения к базе).httpd.conf), добавляя туда ссылку (алиас) на этот каталог.Важно понимать: веб-серверу все равно, что показывает Конфигуратор. Он обращается к физическим папкам на диске. Поэтому мы можем создать неограниченное количество публикаций, которые будут ссылаться на одну и ту же базу (серверную или файловую), но иметь разные настройки доступа.
Разберем по шагам, как можно использовать штатные средства для создания второй точки входа. Предположим, у нас уже есть основная публикация с именем UNF.
TEL (для телефонии).C:\inetpub\wwwroot\tel).После этого 1С создаст новую запись в настройках Apache. Несмотря на то, что при следующем открытии окна публикации Конфигуратор может «забыть» про одну из них или выдать предупреждение «Выполненная ранее публикация не обнаружена», фактически обе точки доступа будут работать. Каждая будет иметь свой файл default.vrd, что позволяет нам настроить их индивидуально.
Проанализируем ситуацию, когда нам нужно гарантированно сохранить работоспособность всех сервисов. Прямая правка конфигурационных файлов дает полный контроль над процессом. Выясним причину, по которой это удобнее: вы не зависите от капризов интерфейса 1С.
Сначала найдем файл httpd.conf вашего сервера Apache. Обычно он находится в папке conf внутри каталога установки Apache. В конце этого файла 1С добавляет блоки настроек. Для создания второй публикации нам нужно убедиться, что там присутствуют записи для обоих алиасов. Пример структуры в httpd.conf:
Alias "/UNF" "C:/inetpub/wwwroot/unf/"
<Directory "C:/inetpub/wwwroot/unf/">
AllowOverride None
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/inetpub/wwwroot/unf/default.vrd"
</Directory>
Alias "/TEL" "C:/inetpub/wwwroot/tel/"
<Directory "C:/inetpub/wwwroot/tel/">
AllowOverride None
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/inetpub/wwwroot/tel/default.vrd"
</Directory>
После добавления таких блоков необходимо перезапустить службу Apache. Теперь у вас есть две точки входа по адресам: http://server/UNF и http://server/TEL.
Теперь рассмотрим подробнее содержимое файла default.vrd для нашей второй публикации (TEL). Чтобы телефония могла заходить в базу без диалогового окна выбора пользователя, нам нужно отредактировать этот файл вручную в текстовом редакторе.
Найдите строку, начинающуюся с <point..., и внутри параметра ib (строка соединения) добавьте имя пользователя и пароль. Посмотрим на пример:
<?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="/TEL"
ib="Srvr="Server1C";Ref="Base1C";Usr="TelephonyRobot";Pwd="StrongPassword123";">
<httpServices>
<service name="Telephony" rootUrl="tel" enable="true" reuseSessions="autouse"/>
</httpServices>
</point>
Важный момент: использование параметра reuseSessions="autouse" крайне рекомендуется для HTTP-сервисов. Это позволяет системе переиспользовать существующие сеансы 1С для входящих запросов, что значительно экономит лицензии и ускоряет отклик системы, так как не тратится время на создание нового сеанса при каждом звонке.
Проанализируем риски: во второй публикации пароль пользователя хранится в открытом виде в файле default.vrd. Чтобы обезопасить систему, выполним следующие шаги:
TelephonyRobot), у которого будут права только на использование конкретных HTTP-сервисов или веб-сервисов. Отключите ему право «Интерактивное открытие», чтобы под ним нельзя было зайти через обычный клиент.httpd.conf для блока /TEL можно прописать ограничение, чтобы к этой публикации мог обращаться только IP-адрес вашей АТС.Для серверных баз данных создание нескольких публикаций практически не влияет на производительность, так как управление блокировками берет на себя кластер серверов 1С. Однако помните, что каждый экземпляр публикации на Apache может создавать свой пул соединений. Вы можете ограничить его, добавив в default.vrd параметры poolSize.
Таким образом, мы выяснили, что создание нескольких публикаций одной базы — это стандартная и корректная процедура. Главное — разделять физические каталоги для хранения файлов default.vrd и корректно прописывать алиасы в настройках веб-сервера Apache.