Как устроен модуль расширения веб-сервера 1С и как его настроить под IIS и Apache
Содержание
Модуль расширения веб-сервера 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С
Схема запроса выглядит так:
- Браузер или тонкий клиент отправляет HTTP-запрос на адрес публикации.
- Веб-сервер видит, что каталог публикации обрабатывает модуль 1С, и передаёт запрос ему.
- Модуль читает файл
default.vrdв каталоге публикации. В нём записана строка соединения с базой и что именно опубликовано. - Модуль подключается к базе: к файловой — напрямую, к клиент-серверной — как клиент кластера.
- Ответ возвращается пользователю через веб-сервер.
Файловая и клиент-серверная база
С файловой базой модуль работает внутри процесса веб-сервера. Все пользователи веб-клиента фактически сидят в одном процессе 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="1c-srv";Ref="buh";">
<ws enable="false"/>
<httpServices publishByDefault="false"/>
</point>
В атрибуте ib — строка соединения. Внутри XML кавычки записываются как ". Блоки ws, httpServices и standardOdata управляют публикацией сервисов.
Варианты модуля для Windows и Linux
Модуль поставляется в нескольких сборках. Нужная выбирается по веб-серверу, его разрядности и операционной системе.
| Веб-сервер | Windows | Linux | Комментарий |
|---|---|---|---|
| IIS 7 и новее | wsisapi.dll | — | Подключается как расширение ISAPI |
| Apache 2.2 | wsap22.dll | wsap22.so | Устаревшая ветка, для новых установок не берите |
| Apache 2.4 | wsap24.dll | wsap24.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С. Что реально помогает:
- Поставить веб-сервер рядом с кластером. Между модулем и рабочими процессами идёт много коротких обменов. Задержка сети в несколько миллисекунд на каждый вызов складывается в секунды на открытии формы.
- Переводить файловую базу в клиент-серверный вариант, если через веб работает больше 5–10 человек одновременно. В файловом режиме все сидят в одном процессе веб-сервера, и любое тяжёлое действие одного пользователя тормозит остальных.
- Включить сжатие и HTTP/2 на внешнем прокси. Если перед Apache стоит nginx, сжатие и шифрование лучше отдать ему, а Apache оставить внутри сети.
- Выделить отдельный веб-сервер под интеграции. Обмены с сайтом и маркетплейсами через HTTP-сервисы могут создавать сотни запросов в минуту. Отдельная публикация на отдельном сервере не мешает бухгалтерам.
- Включить повторное использование сеансов для веб-сервисов. В диалоге публикации у веб-сервисов есть настройка повторного использования сеансов. Без неё каждый вызов создаёт новый сеанс и занимает лицензию на время запроса.
- Держать одинаковую версию платформы на всех узлах. Это не скорость в чистом виде, но после каждого обновления кластера именно забытый модуль на веб-сервере даёт простой на полдня.
Если пользователи работают только через тонкий клиент по 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.