Веб-сервер под 1С:Предприятие 8.3 своими руками: Apache, IIS, HTTPS и публикация баз

· 10 мин

Содержание

Чтобы создать веб-сервер для 1С, нужны три вещи на одной машине: сам веб-сервер (Apache 2.4 или IIS), установленный компонент платформы «Модули расширения веб-сервера» той же разрядности и публикация базы через Конфигуратор или утилиту webinst. После публикации база открывается в браузере по адресу вида http://server/buh и в тонком клиенте по тому же URL.

Выбор связки простой. На Windows чаще ставят Apache 2.4: он легче настраивается и меньше капризничает с правами, чем IIS. IIS берут, когда он уже работает в компании и есть администратор, который его знает. На Linux единственный рабочий вариант для модуля 1С — Apache, а Nginx ставят перед ним как обратный прокси для HTTPS и раздачи статики.

Какую ОС и схему выбрать для веб-сервера 1С

Веб-сервер не хранит данных. Он принимает HTTP-запросы и передаёт их платформе: в файловую базу напрямую или в кластер серверов 1С через порт 1540. Поэтому его можно ставить и на ту же машину, где работает сервер 1С, и на отдельную.

СхемаКогда подходитЧто учесть
Всё на одном сервереДо 20–30 пользователей, одна-две базыПроще всего, но веб-сервер делит память с рабочими процессами
Отдельный веб-сервер в локальной сетиПубликация для удалённых сотрудников и мобильных приложенийНужен доступ от веб-сервера к портам кластера: 1540, 1541 и диапазону рабочих процессов
Веб-сервер в DMZ + проксиДоступ из интернетаНаружу смотрит только прокси на 443, сервер 1С остаётся во внутренней сети

По операционной системе:

  • 🪟 Windows Server 2016 и новее — привычно для большинства админов 1С, графическая публикация из Конфигуратора работает «из коробки».
  • 🐧 Linux (Ubuntu, Debian, Astra, РЕД ОС) — дешевле по лицензиям ОС, стабильнее под нагрузкой, но публикуют только командой webinst и правят конфиги руками.

Файловую базу через веб публиковать можно, но для доступа из интернета это слабое решение: при 5–10 одновременных пользователях начинаются блокировки. Для веб-доступа больше чем у пары человек переходите на клиент-серверный вариант.

Apache, IIS или Nginx: что поставить

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

Веб-серверМодуль 1СОСКомментарий
Apache 2.4wsap24.dll / wsap24.soWindows, LinuxСамый распространённый вариант
Apache 2.2wsap22.dll / wsap22.soWindows, LinuxУстарел, для новых установок не берите
IIS 10wsisapi.dllWindowsРаботает через ISAPI
Nginxмодуля нетЛюбаяТолько прокси перед Apache или IIS

Установка Apache 2.4 на Windows

  1. Скачайте сборку Apache 2.4 для Windows (например, с Apache Lounge) той же разрядности, что и платформа 1С. Сейчас это почти всегда x64.
  2. Распакуйте в C:\Apache24. Если путь другой, поправьте Define SRVROOT в conf\httpd.conf.
  3. Установите Visual C++ Redistributable, который требует сборка.
  4. Зарегистрируйте службу из командной строки администратора:
cd C:\Apache24\bin
httpd.exe -k install
httpd.exe -t
net start Apache2.4

Команда httpd.exe -t проверяет синтаксис конфига. Привыкайте запускать её после каждой правки.

Установка Apache на Linux

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

sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2

IIS

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

Компоненты платформы 1С на веб-сервере

На машину с веб-сервером ставится та же версия платформы, что и на сервере 1С, вплоть до четвёртой цифры номера. Версия, номер которой отличается от версии кластера, не подключится к нему.

В установщике Windows отметьте компонент «Модули расширения веб-сервера». Сервер 1С ставить не нужно, если кластер работает на другой машине.

На Linux при установке из универсального дистрибутива включают компонент ws:

sudo ./setup-full-8.3.xx.xxxx-x86_64.run --mode unattended --enable-components server,ws

Если веб-сервер стоит отдельно от кластера, оставьте только ws. Точный список компонентов для вашей версии выводит сам установщик с ключом --help.

Разрядность модуля и веб-сервера должна совпадать. 32-битный Apache не загрузит 64-битный wsap24.dll, и наоборот. Это самая частая причина того, что служба Apache не стартует сразу после публикации.

Публикация базы 1С на веб-сервере

Публикация создаёт каталог с файлом default.vrd и добавляет в конфиг веб-сервера блок, который связывает URL с этим файлом.

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

  1. Запустите Конфигуратор от имени администратора: без этого он не сможет записать httpd.conf.
  2. Откройте Администрирование → Публикация на веб-сервере.
  3. Укажите имя (оно станет частью адреса, латиницей: buh), веб-сервер «Apache 2.4» и каталог публикации, например C:\inetpub\buh.
  4. Отметьте, что публиковать: тонкий и веб-клиент, OData, веб-сервисы, HTTP-сервисы.
  5. Нажмите «Опубликовать» и согласитесь на перезапуск веб-сервера.

Командой webinst

Утилита webinst лежит в каталоге bin платформы. Она удобна для скриптов и для Linux, где графической публикации нет.

Windows, файловая база:

"C:\Program Files\1cv8\8.3.xx.xxxx\bin\webinst.exe" -publish -apache24 -wsdir buh -dir "C:\inetpub\buh" -connstr "File=""D:\Bases\Buh"";" -confpath "C:\Apache24\conf\httpd.conf"

Linux, клиент-серверная база :

sudo /opt/1cv8/x86_64/8.3.xx.xxxx/webinst -publish -apache24 \
  -wsdir zup -dir /var/www/zup \
  -connstr "Srvr=srv1c;Ref=zup;" \
  -confpath /etc/apache2/apache2.conf

После этого в конце конфига Apache появится примерно такой блок:

LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.xx.xxxx/wsap24.so"

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

Директива LoadModule должна быть в конфиге одна, даже если баз десять. При публикации разных версий платформы старая строка остаётся, и Apache падает на дубле. Удалить публикацию можно той же утилитой с ключом -delete.

Права на каталоги

Пользователь, от которого работает веб-сервер, должен иметь:

  • 📁 чтение каталога публикации с default.vrd;
  • 📁 полный доступ к каталогу файловой базы (если база файловая);
  • 📁 запись в каталог временных файлов.

На Windows Apache по умолчанию работает от Local System, а IIS — от учётки пула приложений. На Linux это www-data (Debian/Ubuntu) или apache (РЕД ОС, CentOS-подобные).

Пул сеансов, соединения и таймауты

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

Количество соединений на процесс

Параметр задаётся в свойствах рабочего сервера в консоли кластера, рядом с «Количество ИБ на процесс». Когда лимит достигнут, кластер запускает новый рабочий процесс. Маленькое значение при большом числе веб-пользователей плодит процессы и расходует память; слишком большое собирает всех в одном процессе, и сбой одного запроса бьёт по всем.

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

Таймауты и пул для сервисов

Для веб-сервисов, HTTP-сервисов и OData повторное использование сеансов настраивают в 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="/zup"
       ib="Srvr=srv1c;Ref=zup;">
  <ws pointEnableCommon="true"/>
  <standardOdata enable="true"
                 reuseSessions="autouse"
                 sessionMaxAge="20"
                 poolSize="10"
                 poolTimeout="5"/>
</point>
АтрибутЧто значитОриентир
reuseSessionsПовторно использовать сеансыautouse или use
sessionMaxAgeСколько секунд простаивающий сеанс ждёт следующего запроса20–60
poolSizeМаксимум сеансов в пулеПо числу параллельных обращений интеграции
poolTimeoutСколько секунд запрос ждёт свободный сеанс из пула5–10

После правки default.vrd перезапустите веб-сервер. Перезапуск обрывает сеансы веб-клиентов, поэтому делайте его вне рабочего времени или предупредите пользователей.

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

HTTPS через Let’s Encrypt

Публиковать базу в интернет по голому HTTP нельзя: логины и пароли пользователей 1С уйдут открытым текстом. Бесплатный сертификат Let’s Encrypt решает задачу за 10 минут, если у сервера есть доменное имя и открыт порт 80 для проверки.

Linux + Apache

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

Certbot сам добавит виртуальный хост на 443 и пропишет продление по таймеру. Блок публикации 1С с Alias и <Directory> работает и в HTTPS-хосте, потому что он стоит в общем конфиге.

Windows + Apache или IIS

Для Windows используют клиент win-acme: он выпускает сертификат, кладёт его в хранилище или в файлы и создаёт задачу планировщика на продление. Для IIS привязка к сайту делается автоматически, для Apache указывают пути к файлам в SSLCertificateFile и SSLCertificateKeyFile и подключают mod_ssl.

Вариант с Nginx впереди

Удобная схема: Nginx на 443 держит сертификат, а Apache с модулем 1С слушает только 127.0.0.1:8080.

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 200m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_read_timeout 600s;
    }
}

client_max_body_size нужен для загрузки файлов в базу, а увеличенный proxy_read_timeout — для долгих отчётов, иначе Nginx оборвёт их через 60 секунд с ошибкой 504.

Производительность и разбор ошибок публикации

Сам веб-сервер редко бывает узким местом. Тормозит обычно кластер или СУБД, а веб-сервер просто показывает это пользователю. Что всё-таки стоит настроить на его стороне:

  • ⚙️ включите сжатие ответов (mod_deflate в Apache, gzip в Nginx) — веб-клиент передаёт много JavaScript;
  • ⚙️ на Windows с Apache поднимите ThreadsPerChild в conf\extra\httpd-mpm.conf, если пользователей больше 50;
  • ⚙️ держите веб-сервер и кластер в одной локальной сети: задержка между ними множится на каждый серверный вызов.

Логи для разбора: на Windows C:\Apache24\logs\error.log, на Linux /var/log/apache2/error.log, у IIS — журнал событий Windows и логи сайта.

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

Защита и резервные копии веб-сервера 1С

Опубликованная в интернет база — открытая дверь в бухгалтерию. Минимальный набор мер:

  1. 🔒 Только HTTPS. Порт 80 оставьте лишь для проверки Let’s Encrypt и редиректа на 443.
  2. 🔒 Пароли у всех пользователей 1С. Пользователь без пароля в опубликованной базе — прямой вход для любого, кто знает адрес.
  3. 🔒 Аутентификация ОС — только внутри сети. Для внешних публикаций её лучше отключить.
  4. 🔒 Не публикуйте лишнее. Если нужен только веб-клиент, не включайте OData и веб-сервисы: каждый открытый сервис — ещё одна точка входа.
  5. 🔒 Ограничьте круг адресов. Для офисов с постоянным IP — Require ip в Apache или allow/deny в Nginx; для удалённых сотрудников — VPN.
  6. 🔒 Защита от подбора паролей. На Linux — fail2ban по логам веб-сервера, плюс ограничение частоты запросов в Nginx (limit_req).
  7. 🔒 Скрыть версию сервера. В Apache ServerTokens Prod и ServerSignature Off.

Кластер 1С никогда не публикуйте в интернет напрямую: порты 1540–1541 наружу открывать нельзя ни при каких схемах.

Что входит в резервную копию

Данных на веб-сервере нет, база копируется отдельно средствами СУБД или выгрузкой .dt. Но восстановление сервера с нуля без конфигов займёт полдня. Сохраняйте:

  • 📦 каталоги публикаций с файлами default.vrd;
  • 📦 httpd.conf (или apache2.conf и sites-available) и конфиги Nginx;
  • 📦 сертификаты и ключи (/etc/letsencrypt целиком);
  • 📦 текстовую заметку: версия платформы, разрядность, список публикаций и строк подключения.

Для восстановления ставят ту же версию платформы, возвращают конфиги на место и перезапускают службу. Публиковать базы заново не требуется.

Веб-сервер 1С готов к работе
Выполнено: 0 / 8

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

Нужна ли отдельная лицензия на веб-сервер 1С?
Отдельной лицензии на веб-сервер нет. Каждый пользователь веб-клиента или тонкого клиента через веб занимает обычную клиентскую лицензию, как при подключении напрямую.
Можно ли опубликовать несколько баз на одном веб-сервере?
Да. Каждая база получает свой каталог, свой default.vrd и своё имя в адресе: /buh, /zup, /ut. Модуль 1С при этом подключается в конфиге один раз.
Можно ли обойтись без Apache и IIS, только Nginx?
Нет. У платформы нет модуля для Nginx, поэтому он работает только как прокси перед Apache или IIS.
Что делать с публикацией после обновления платформы?
Поменяйте путь к модулю в строке LoadModule на каталог новой версии и перезапустите веб-сервер. Публиковать базы заново не нужно, если строки подключения не менялись.
Как подключиться к опубликованной базе из тонкого клиента?
В списке баз нажмите «Добавить», выберите подключение «На веб-сервере» и укажите адрес публикации, например https://1c.example.ru/buh.