Как устроен модуль расширения веб-сервера 1С и как его настроить под IIS и Apache

· 10 мин

Содержание

Модуль расширения веб-сервера 1С — это библиотека платформы, которая подключается к IIS или Apache и превращает обычный веб-сервер в шлюз к информационной базе. Без него нельзя открыть базу в браузере, подключить тонкий клиент по HTTP, опубликовать веб-сервисы, HTTP-сервисы и OData. Для IIS это wsisapi.dll, для Apache 2.4 — wsap24.dll в Windows и wsap24.so в Linux.

Типичная ситуация: бухгалтер уходит на удалёнку, VPN поднимать долго, и администратору говорят «сделай, чтобы 1С открывалась в браузере». Публикация занимает 15 минут, а потом начинаются ошибки 500, «модуль не найден» и несовпадение версий. Почти все они растут из того, как модуль работает внутри веб-сервера.

Что делает модуль расширения веб-сервера и когда он нужен

Сам по себе Apache или IIS ничего не знает о 1С. Он отдаёт файлы и передаёт запросы обработчикам. Модуль расширения регистрируется как такой обработчик: всё, что приходит на адрес публикации, например https://site.ru/buh/, веб-сервер отдаёт ему.

Модуль нужен для таких задач:

  • 🌐 веб-клиент — работа в базе из браузера без установки платформы;
  • 💻 тонкий клиент по HTTP — подключение к базе через интернет по адресу вида https://site.ru/buh;
  • 🔗 веб-сервисы SOAP и HTTP-сервисы конфигурации — обмен с сайтами, мобильными приложениями, кассами;
  • 📊 стандартный интерфейс OData — выгрузка данных во внешние системы и BI;
  • 📱 подключение мобильного клиента к базе.

Для работы в локальной сети через тонкий или толстый клиент модуль не нужен. Он нужен только там, где к базе обращаются по протоколу HTTP или HTTPS.

Как модуль взаимодействует с веб-сервером и базой 1С

Схема запроса выглядит так:

  1. Браузер или тонкий клиент отправляет HTTP-запрос на адрес публикации.
  2. Веб-сервер видит, что каталог публикации обрабатывает модуль 1С, и передаёт запрос ему.
  3. Модуль читает файл default.vrd в каталоге публикации. В нём записана строка соединения с базой и что именно опубликовано.
  4. Модуль подключается к базе: к файловой — напрямую, к клиент-серверной — как клиент кластера.
  5. Ответ возвращается пользователю через веб-сервер.

Файловая и клиент-серверная база

С файловой базой модуль работает внутри процесса веб-сервера. Все пользователи веб-клиента фактически сидят в одном процессе Apache или в пуле приложений IIS. У учётной записи этого процесса должны быть права на чтение и запись каталога базы.

С клиент-серверной базой модуль ведёт себя как обычный клиент. Он подключается к агенту сервера 1С (порт 1540), затем к менеджеру кластера (1541) и рабочим процессам. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию 1560–1591.

Версия модуля расширения должна совпадать с версией сервера 1С до последней цифры сборки. Модуль — это часть платформы, а не отдельный продукт. Обновили кластер с 8.3.24 до 8.3.25 — обновите и модуль на веб-сервере, и путь к нему в конфигурации.

Файл default.vrd

Это XML-дескриптор публикации. Минимальный вариант:

<?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="/buh"
       ib="Srvr=&quot;1c-srv&quot;;Ref=&quot;buh&quot;;">
  <ws enable="false"/>
  <httpServices publishByDefault="false"/>
</point>

В атрибуте ib — строка соединения. Внутри XML кавычки записываются как &quot;. Блоки ws, httpServices и standardOdata управляют публикацией сервисов.

Варианты модуля для Windows и Linux

Модуль поставляется в нескольких сборках. Нужная выбирается по веб-серверу, его разрядности и операционной системе.

Веб-серверWindowsLinuxКомментарий
IIS 7 и новееwsisapi.dll—Подключается как расширение ISAPI
Apache 2.2wsap22.dllwsap22.soУстаревшая ветка, для новых установок не берите
Apache 2.4wsap24.dllwsap24.soОсновной вариант на сегодня

Файлы лежат в каталоге bin установленной платформы, например C:\Program Files\1cv8\8.3.24.1467\bin\. В Linux при установке нового формата (одним установщиком) путь вида /opt/1cv8/x86_64/8.3.24.1467/, у старых пакетов — /opt/1C/v8.3/x86_64/.

Разрядность

Модуль загружается в процесс веб-сервера, поэтому разрядности должны совпадать:

  • 64-битный Apache — модуль из 64-битной платформы;
  • 32-битный Apache — модуль из 32-битной платформы;
  • в IIS — смотрите параметр пула приложений «Разрешены 32-разрядные приложения». Для 64-битного модуля он должен быть выключен.

Windows или Linux

На Windows проще связка с IIS: публикация делается из Конфигуратора мышкой, права раздаются через проводник. Apache на Windows тоже работает, но его обычно ставят как службу из сторонней сборки, например Apache Lounge.

На Linux выбора нет — только Apache 2.4. Зато он стабильнее держит много сеансов веб-клиента и проще автоматизируется.

С платформы 8.3.14 есть автономный сервер ibsrv. Он сам принимает HTTP-запросы и публикует базу без IIS и Apache. Для небольшой файловой базы это вариант без отдельного веб-сервера.

Установка модуля и публикация базы

Шаг 1. Установить компонент платформы

Windows. Запустите установщик платформы той же версии, что и сервер 1С. В списке компонентов включите «Модули расширения веб-сервера». Если платформа уже стоит, выберите «Изменить» в «Программы и компоненты» и добавьте компонент.

Linux. В установщике нового формата отметьте компонент модулей расширения веб-сервера. Для старых deb-пакетов это пакет 1c-enterprise83-ws.

Шаг 2. Подготовить веб-сервер

Для IIS включите роли: Веб-сервер (IIS) → Разработка приложений → Расширения ISAPI и Фильтры ISAPI, плюс «Средства управления IIS». Без расширений ISAPI модуль не зарегистрируется.

Для Apache в Linux достаточно пакета apache2 (Debian, Ubuntu) или httpd (RHEL-семейство, Альт, РЕД ОС).

Шаг 3. Опубликовать базу

Через Конфигуратор (Windows). Запустите Конфигуратор от имени администратора, иначе публикация упадёт с ошибкой доступа. Меню Администрирование → Публикация на веб-сервере. Укажите имя публикации, веб-сервер, каталог и отметьте, что публиковать: тонкий клиент и веб-клиент, веб-сервисы, HTTP-сервисы, OData. Нажмите «Опубликовать».

Через webinst (Windows и Linux). Утилита лежит рядом с модулем. Пример для Apache 2.4 в Ubuntu и клиент-серверной базы:

sudo /opt/1cv8/x86_64/8.3.24.1467/webinst -publish -apache24 \
  -wsdir buh \
  -dir /var/www/buh \
  -connstr "Srvr=1c-srv;Ref=buh;" \
  -confPath /etc/apache2/apache2.conf

Для файловой базы строка соединения будет вида File=/srv/1c/buh;. Удалить публикацию — тот же вызов с ключом -delete. Для IIS вместо -apache24 указывается -iis.

Шаг 4. Проверить, что прописалось в Apache

webinst добавляет в конфигурацию строки такого вида:

LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.24.1467/wsap24.so"

# 1c publication
Alias "/buh" "/var/www/buh/"
<Directory "/var/www/buh/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/buh/default.vrd"
</Directory>

Строка LoadModule должна быть одна на весь сервер, даже если публикаций десять. После правок проверьте синтаксис командой apachectl configtest и перезапустите Apache.

Перезапуск Apache или пула IIS обрывает все сеансы веб-клиента и тонкого клиента через HTTP. Несохранённые документы у пользователей пропадут. Делайте это вне рабочего времени или предупредите людей.

Шаг 5. Права доступа

  • IIS: группе IIS_IUSRS нужны права на чтение каталога публикации и каталога bin платформы. Для файловой базы — изменение каталога базы.
  • Apache в Linux: процесс работает от пользователя www-data или apache. Ему нужен доступ к каталогу публикации, а для файловой базы — запись в её каталог.
  • Apache в Windows как служба по умолчанию запускается от «Локальная система». Если база на сетевом ресурсе, запускайте службу от доменной учётной записи с правами на этот ресурс.

Ошибки модуля расширения: что видит пользователь и что проверить

Диагностика: выберите симптом

Если ошибка неочевидна, смотрите журналы. В Linux это /var/log/apache2/error.log или /var/log/httpd/error_log, в IIS — журнал событий Windows «Приложение» и журналы сайта в C:\inetpub\logs\LogFiles. Для клиент-серверной базы полезно включить технологический журнал на сервере 1С: там видно, доходит ли подключение от веб-сервера до кластера.

Как ускорить работу через веб-публикацию

Модуль редко бывает узким местом сам по себе. Медленный веб-клиент обычно означает медленную сеть или перегруженный сервер 1С. Что реально помогает:

  1. Поставить веб-сервер рядом с кластером. Между модулем и рабочими процессами идёт много коротких обменов. Задержка сети в несколько миллисекунд на каждый вызов складывается в секунды на открытии формы.
  2. Переводить файловую базу в клиент-серверный вариант, если через веб работает больше 5–10 человек одновременно. В файловом режиме все сидят в одном процессе веб-сервера, и любое тяжёлое действие одного пользователя тормозит остальных.
  3. Включить сжатие и HTTP/2 на внешнем прокси. Если перед Apache стоит nginx, сжатие и шифрование лучше отдать ему, а Apache оставить внутри сети.
  4. Выделить отдельный веб-сервер под интеграции. Обмены с сайтом и маркетплейсами через HTTP-сервисы могут создавать сотни запросов в минуту. Отдельная публикация на отдельном сервере не мешает бухгалтерам.
  5. Включить повторное использование сеансов для веб-сервисов. В диалоге публикации у веб-сервисов есть настройка повторного использования сеансов. Без неё каждый вызов создаёт новый сеанс и занимает лицензию на время запроса.
  6. Держать одинаковую версию платформы на всех узлах. Это не скорость в чистом виде, но после каждого обновления кластера именно забытый модуль на веб-сервере даёт простой на полдня.

Если пользователи работают только через тонкий клиент по HTTP, а веб-клиент не нужен, всё равно не отключайте его в публикации без проверки: часть сценариев открытия ссылок на объекты использует его.

Защита публикации 1С от атак

Опубликованная база видна из интернета, а значит, её сканируют боты. Минимальный набор мер:

  • 🔒 Только HTTPS. Сертификат Let’s Encrypt или корпоративный. По HTTP пароль пользователя 1С передаётся в открытом виде.
  • 🚫 Не храните логин и пароль в строке соединения. webinst и Конфигуратор позволяют прописать Usr и Pwd в default.vrd. Тогда любой, кто откроет адрес, войдёт под этим пользователем.
  • 🧹 Публикуйте только нужное. Не нужны веб-сервисы — выключите их. Для HTTP-сервисов снимите публикацию по умолчанию и включайте конкретные сервисы.
  • 👥 У каждого сотрудника свой пользователь 1С со сложным паролем. Пользователь без пароля в опубликованной базе — прямой вход для любого.
  • 🌍 Ограничьте доступ по IP, если работают из известных офисов: директива Require ip в Apache или ограничения IP-адресов в IIS.
  • 🧱 Закройте порты кластера снаружи. Из интернета должен быть доступен только 443. Порты 1540, 1541 и диапазон рабочих процессов открываются только между веб-сервером и сервером 1С.
  • 🏷️ Скройте версию веб-сервера: ServerTokens Prod и ServerSignature Off в Apache.
  • 🛡️ Поставьте обратный прокси с ограничением частоты запросов и fail2ban по журналам. Это отсекает перебор паролей.
  • 🔄 Обновляйте платформу. Исправления уязвимостей приходят вместе с новыми сборками, а модуль — часть сборки.

Хорошая схема для небольшой компании: снаружи nginx с сертификатом и ограничением частоты, за ним во внутренней сети Apache с модулем 1С, за ним кластер. Наружу торчит только nginx.

Частые вопросы

Нужна ли отдельная лицензия на модуль расширения веб-сервера?
Нет. Модуль входит в платформу. Лицензии расходуются на сеансы пользователей, как при обычной работе, а для клиент-серверной базы нужна лицензия на сервер 1С.
Можно ли опубликовать на одном веб-сервере базы разных версий платформы?
На одном экземпляре Apache загружается один модуль одной версии. Для баз на разных кластерах разных версий используйте разные веб-серверы или разные экземпляры Apache на разных портах.
Почему после обновления платформы публикация перестала работать?
Путь в LoadModule указывает на каталог старой версии, а модуль не совпадает с версией кластера. Установите модуль новой сборки и переопубликуйте базу или исправьте путь вручную.
Можно ли опубликовать базу без IIS и Apache?
Да, через автономный сервер ibsrv, он есть с платформы 8.3.14. Для рабочих нагрузок с десятками пользователей привычнее связка Apache или IIS с кластером.
Где посмотреть, какая версия модуля подключена?
В Apache — в строке LoadModule конфигурационного файла: в пути указан номер сборки. В IIS — в сопоставлениях обработчиков сайта, где виден путь к wsisapi.dll.