Как вывести базу 1С 8.3 в браузер: модуль веб-сервера, публикация и защита

· 9 мин

Содержание

«1С Публикатор» не нужно скачивать и устанавливать отдельной программой — такого продукта нет. Так обычно называют механизм веб-публикации платформы: диалог Администрирование → Публикация на веб-сервере в Конфигураторе, утилиту webinst и модуль расширения веб-сервера, который ставится вместе с платформой. Настройка сводится к трём шагам: поставить компонент «Модули расширения веб-сервера», подготовить IIS или Apache и опубликовать базу.

После публикации база открывается по адресу вида http://server/buh в браузере (веб-клиент) или в тонком клиенте через веб-сервер. Тот же механизм публикует веб-сервисы, HTTP-сервисы и интерфейс OData для интеграций. Порядок одинаков для файловой и клиент-серверной базы, различаются только права доступа и строка подключения.

Как устроена веб-публикация 1С и что она даёт

Публикация — это связка из трёх частей:

  • 🌐 веб-сервер (IIS на Windows или Apache 2.4 на Windows и Linux) принимает запросы браузера;
  • 🧩 модуль расширения 1С (wsisapi.dll для IIS, wsap24.dll или wsap24.so для Apache 2.4) передаёт запросы платформе;
  • 📄 файл default.vrd в каталоге публикации хранит строку подключения к базе и список опубликованных сервисов.

Сам веб-сервер базу не хранит и не обрабатывает. В файловом варианте модуль работает с файлами базы напрямую, в клиент-серверном — подключается к кластеру серверов 1С.

Что получают после публикации:

  • работу через браузер без установки клиента;
  • подключение удалённых пользователей тонким клиентом по HTTP или HTTPS вместо проброса портов кластера;
  • точку входа для обменов: SOAP-веб-сервисы, HTTP-сервисы, OData;
  • работу мобильных приложений и сайтов с базой.

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

Что подготовить до публикации базы

Проверьте четыре вещи до того, как открывать Конфигуратор.

ЧтоТребование
РазрядностьМодуль 1С и веб-сервер одной разрядности: 64-битный Apache — 64-битная платформа
Версия платформыМодуль той же версии, что и платформа, с которой работает база или кластер
ПраваКонфигуратор для публикации запускают от имени администратора Windows
ПортыНа веб-сервере открыты 80 и 443, порты кластера 1540, 1541, 1560–1591 наружу не нужны

Для клиент-серверной базы веб-сервер может стоять на отдельной машине. Тогда на нём ставят только платформу с модулями веб-сервера, а базу указывают строкой Srvr=имя_сервера;Ref=имя_базы;. Между веб-сервером и кластером должны быть открыты порты кластера.

Для файловой базы каталог с файлом 1Cv8.1CD должен быть доступен учётной записи, от имени которой работает веб-сервер. Сетевую папку на другом компьютере использовать можно, но это медленно и капризно с правами — лучше держать базу на той же машине.

Установка модуля веб-сервера и подготовка IIS или Apache

Шаг 1. Компонент в установщике платформы

  1. Запустите setup.exe нужной версии платформы.
  2. В списке компонентов отметьте «Модули расширения веб-сервера».
  3. Если платформа уже стоит, запустите установщик ещё раз и выберите изменение состава компонентов.

На Linux модуль входит в пакет сервера 1С, файл wsap24.so лежит в каталоге платформы, например /opt/1cv8/x86_64/8.3.25.1374/.

Шаг 2а. Подготовка IIS

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

Дальше настройте пул приложений:

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

Шаг 2б. Подготовка Apache 2.4

На Windows используют сборку Apache с сайта Apache Lounge нужной разрядности. Установите службу командой из каталога bin:

cd C:\Apache24\bin
httpd.exe -k install

На Ubuntu и Debian хватит пакета из репозитория:

sudo apt install apache2
sudo systemctl enable --now apache2

Публикация базы 1С: Конфигуратор и webinst

Через Конфигуратор (Windows)

  1. Откройте базу в Конфигураторе от имени администратора: правая кнопка по ярлыку → «Запуск от имени администратора».
  2. Выберите Администрирование → Публикация на веб-сервере.
  3. Заполните поля:
    • Имя — латиницей, без пробелов: buh. Это часть адреса http://server/buh;
    • Веб-сервер — Internet Information Services или Apache 2.4;
    • Каталог — папка публикации, например C:\inetpub\wwwroot\buh.
  4. Оставьте флажок публикации тонкого клиента и веб-клиента.
  5. На вкладках веб-сервисов и HTTP-сервисов отметьте только те сервисы, которые реально нужны интеграциям.
  6. Нажмите «Опубликовать». Для Apache программа предложит перезапустить веб-сервер — согласитесь.

Перезапуск веб-сервера обрывает сеансы всех пользователей, которые работают через браузер. На рабочем сервере публикуйте вне рабочего времени.

Через webinst (Linux и пакетные скрипты)

На Linux Конфигуратор для публикации обычно не используют. Утилита webinst лежит в каталоге платформы:

cd /opt/1cv8/x86_64/8.3.25.1374
sudo ./webinst -publish -apache24 -wsdir buh -dir /var/www/buh \
  -connstr "Srvr=srv1c;Ref=buh;" -confpath /etc/apache2/apache2.conf
sudo systemctl restart apache2

Для удаления публикации используют ключ -delete с теми же -wsdir и -confpath. Список всех параметров выводит запуск утилиты без ключей.

Публикация веб-сервисов, HTTP-сервисов и OData

Для обменов публикуют не интерфейс, а сервисы. В том же диалоге:

  • веб-сервисы (SOAP) — отметьте нужные на вкладке веб-сервисов, описание WSDL будет доступно по адресу http://server/buh/ws/имя_сервиса?wsdl;
  • HTTP-сервисы — отметьте на своей вкладке, адрес вида http://server/buh/hs/корневой_URL/...;
  • OData — флажок публикации стандартного интерфейса OData, адрес http://server/buh/odata/standard.odata/.

Для OData мало флажка: состав доступных объектов задают в самой базе, без этого внешняя система получит пустой список. Пользователю, под которым ходит интеграция, дайте только права на нужные объекты.

После обновления платформы

Модуль веб-сервера жёстко привязан к версии платформы. После перехода на новую версию:

  1. Установите новую платформу с компонентом «Модули расширения веб-сервера».
  2. Переопубликуйте базу из Конфигуратора новой версии или исправьте путь в LoadModule вручную.
  3. Перезапустите веб-сервер и откройте базу в браузере.
  4. Удаляйте старую версию платформы только после проверки.

Если пропустить второй шаг и удалить старую платформу, Apache просто не запустится.

Что появится в конфигурации Apache

После публикации в httpd.conf или apache2.conf добавятся строки такого вида:

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

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>

А в каталоге публикации — файл default.vrd:

<?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;srv1c&quot;;Ref=&quot;buh&quot;;">
</point>

Проверьте результат: откройте в браузере http://имя_сервера/buh. Должно появиться окно входа в базу.

Строку LoadModule пишут один раз на весь Apache, даже если опубликовано десять баз. Каждой базе нужны только свои Alias и <Directory>.

Защита публикации: HTTPS, пароли и фаервол

Опубликованная база открыта всем, кто знает адрес. Если сервер смотрит в интернет, без защиты её не оставляют.

Пароли в базе. У каждого пользователя 1С должен быть пароль. Пользователь без пароля в опубликованной базе — это вход для любого, кто подберёт имя из списка.

HTTPS. Сертификат ставят на веб-сервер, сама 1С в этом не участвует. Для Apache на Linux бесплатный сертификат Let’s Encrypt выпускает certbot:

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d 1c.example.ru

В IIS сертификат привязывают к сайту в разделе «Привязки» на порт 443. После этого в тонком клиенте адрес базы указывают с https://.

Фаервол. Наружу открывайте только 443 (и 80 для перенаправления на HTTPS). Порты кластера и RDP в интернет не выставляют. На Ubuntu:

sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw enable

Перед ufw enable на удалённом сервере разрешите SSH (sudo ufw allow OpenSSH), иначе потеряете доступ к машине.

Дополнительно:

  • 🔒 отдельная публикация для сервисов обмена с отдельным пользователем 1С, у которого только нужные права;
  • 🔒 базовая HTTP-аутентификация или ограничение по IP на уровне веб-сервера для служебных публикаций;
  • 🔒 для файловой базы — права учётной записи веб-сервера только на каталог этой базы, а не на весь диск.

Ускорение работы через веб-сервер

Большую часть времени запрос тратит не на веб-сервер, а на сервер 1С и СУБД. Поэтому сначала проверяют их, а уже потом настройки Apache или IIS.

Что реально помогает:

  1. Веб-сервер рядом с кластером. Каждый вызов из браузера — это обращение к серверу 1С. Сеть между ними с задержкой в десятки миллисекунд делает интерфейс вязким.
  2. Сжатие ответов. Включите mod_deflate в Apache или динамическое сжатие в IIS — по медленным каналам формы открываются заметно быстрее.
  3. Тонкий клиент вместо браузера. Для постоянной работы тонкий клиент через HTTP быстрее веб-клиента: часть интерфейса он рисует сам.
  4. Лимиты потоков Apache. На Windows Apache работает в режиме mpm_winnt, число потоков задаёт ThreadsPerChild. При сотне пользователей значение по умолчанию стоит увеличить.
  5. Файловая база — только для небольших команд. При пяти-десяти одновременных пользователях через веб начинаются ожидания блокировок. Дальше нужен клиент-серверный вариант.

Если тормозит только один отчёт или обработка, веб-публикация ни при чём — проблема в запросе или данных, а ускорять нужно их.

Nginx перед Apache: обратный прокси для публикации

Частая схема для доступа из интернета: nginx принимает HTTPS на 443 и передаёт запросы Apache, который слушает только локальный порт. Плюсы — сертификаты и защита в одном месте, Apache не торчит наружу.

Сначала переведите Apache на локальный порт: в ports.conf укажите Listen 127.0.0.1:8080. Затем в nginx:

server {
    listen 443 ssl http2;
    server_name 1c.example.ru;

    ssl_certificate     /etc/letsencrypt/live/1c.example.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/1c.example.ru/privkey.pem;

    client_max_body_size 100m;

    location /buh/ {
        proxy_pass http://127.0.0.1:8080/buh/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

Три параметра здесь не случайны:

  • client_max_body_size — без него nginx отрежет загрузку файлов больше 1 МБ, а присоединённые файлы и обмены упадут с ошибкой 413;
  • proxy_read_timeout — длительные операции (закрытие месяца , тяжёлый отчёт) идут дольше стандартных 60 секунд, и пользователь получит 504;
  • путь /buh/ в location и proxy_pass совпадает с именем публикации — иначе 1С не найдёт свой ресурс.

После правок проверьте конфигурацию и перечитайте её без остановки сервиса:

sudo nginx -t && sudo systemctl reload nginx

Ошибки публикации и как их снять

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

Перезапуск Apache или пула IIS ради исправления обрывает сеансы всех веб-пользователей. Предупредите их или выберите время вне смены.

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

Нужна ли отдельная лицензия для веб-публикации?
Для пользователей — нет: веб-клиент и тонкий клиент через веб-сервер используют те же клиентские лицензии. Для клиент-серверной базы по-прежнему нужна лицензия на сервер 1С.
Можно ли опубликовать несколько баз на одном веб-сервере?
Да. Каждая база получает своё имя публикации и свой каталог: /buh, /zup, /ut. Модуль LoadModule в Apache подключается один раз.
Как подключить тонкий клиент к опубликованной базе?
В окне выбора баз добавьте существующую базу, выберите вариант «На веб-сервере» и укажите адрес, например https://1c.example.ru/buh.
Работает ли публикация на Linux с базой на Windows-сервере?
Да, если веб-сервер видит кластер по сети и версия модуля совпадает с версией сервера 1С. Строка подключения та же: Srvr=имя_сервера;Ref=имя_базы;.
Как снять публикацию?
В Конфигураторе откройте тот же диалог публикации и нажмите «Отключить». На Linux выполните webinst с ключом -delete. Сама база при этом не меняется.