Как вынести веб-доступ к базе 1С на отдельную машину с IIS или Apache

· 9 мин

Содержание

Чтобы опубликовать базу 1С на внешнем веб-сервере, поставьте на эту машину платформу 1С с компонентом «Модули расширения веб-сервера» той же версии, что и сервер 1С, и выполните публикацию утилитой webinst или из Конфигуратора, запущенного на самом веб-сервере. В строке соединения укажите адрес кластера (Srvr=srv1c;Ref=buh;) или сетевой путь к файловой базе. Дальше остаются права, порты и HTTPS.

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

1. Что подготовить на веб-сервере до публикации

Схема с отдельной машиной выглядит так: пользователь открывает браузер → веб-сервер (IIS или Apache) с модулем 1С → сервер 1С:Предприятия или общая папка с файловой базой. Веб-сервер сам данных не хранит, он только передаёт запросы.

Что установить

  • 🖥️ ОС: Windows Server 2016 и новее или Linux. Для внешнего доступа удобнее отдельная виртуальная машина в DMZ.
  • 🌐 Веб-сервер: роль IIS или Apache 2.4 (для Windows — сборка x64, если модуль 1С 64-разрядный).
  • 📦 Платформа 1С: из дистрибутива сервера или клиента выберите компоненты «Модули расширения веб-сервера» и «Администрирование сервера 1С:Предприятия». Тонкий клиент ставить не обязательно.
  • 🔢 Версия: номер платформы на веб-сервере должен совпадать с номером на сервере 1С до последней цифры (например, 8.3.25.1374 и там, и там). Иначе подключение к кластеру упадёт с ошибкой о несоответствии версий.

Роль IIS: какие службы ролей отметить

В диспетчере серверов добавьте роль «Веб-сервер (IIS)» и в службах ролей раскройте «Разработка приложений». Там нужны:

  1. «Расширения ISAPI».
  2. «Фильтры ISAPI».
  3. Желательно «Сжатие динамического содержимого» в группе «Производительность» — пригодится позже.

Без расширений ISAPI модуль wsisapi.dll не загрузится, и любая публикация будет отдавать ошибку 404 или 500.

2. Публикация базы на внешнем веб-сервере: Конфигуратор или webinst

Публикация из Конфигуратора работает только с веб-сервером, установленным на той же машине. Если IIS стоит отдельно, есть два пути: запустить Конфигуратор прямо на веб-сервере или выполнить публикацию из командной строки.

СпособКогда подходитЧто учесть
Конфигуратор на веб-сервереРазовая публикация, нужен визуальный выбор опцийКонфигуратор запускать от имени администратора; на машине нужен толстый клиент и лицензия на запуск
Утилита webinstНесколько баз, скрипты, Linux, нет толстого клиентаСтроку соединения и пути пишете вручную

Вариант А. Через Конфигуратор

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

Вариант Б. Через webinst

Утилита лежит в каталоге bin установленной платформы. Публикация серверной базы в IIS:

cd "C:\Program Files\1cv8\8.3.25.1374\bin"
webinst -publish -iis -wsdir buh -dir "C:\inetpub\wwwroot\buh" -connstr "Srvr=srv1c;Ref=buh;"

Файловая база в общей папке на другой машине:

webinst -publish -iis -wsdir buh -dir "C:\inetpub\wwwroot\buh" -connstr "File=\\fs01\bases\buh;"

Удалить публикацию: webinst -delete -iis -wsdir buh. Полный список ключей выводит webinst -?.

В каталоге публикации появится файл 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;;"/>

Если базу перенесли на другой сервер 1С, не переопубликовывайте всё заново: поменяйте значение Srvr в атрибуте ib и перезапустите пул приложений.

3. Настройка IIS для опубликованной базы: пул и права

После публикации в диспетчере IIS появится приложение buh внутри «Default Web Site». Дальше проверяют три вещи.

Разрядность пула

Откройте «Пулы приложений» → пул публикации → «Дополнительные параметры». Параметр «Разрешить 32-разрядные приложения»:

  • False — если установлена 64-разрядная платформа (обычный случай);
  • True — только если на веб-сервере стоит 32-разрядная платформа.

Несовпадение разрядности — классическая причина ошибки HTTP 500.0 сразу после публикации.

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

КаталогКому дать праваКакие
C:\Program Files\1cv8\<версия>\binIIS_IUSRSЧтение и выполнение
Каталог публикации C:\inetpub\wwwroot\buhIIS_IUSRSЧтение
Каталог файловой базыУдостоверение пулаИзменение

Для серверной базы права на файлы базы не нужны: данные лежат в СУБД, веб-сервер общается только с кластером.

Файловая база на другом компьютере

Здесь кроется главный подвох. Пул по умолчанию работает от ApplicationPoolIdentity — локальной учётной записи, которую файловый сервер не знает. Доступа к \\fs01\bases\buh у неё не будет.

Решение:

  1. Создайте доменную служебную учётную запись, например svc-1c-web.
  2. Дайте ей права «Изменение» на общую папку и на NTFS-каталог базы.
  3. В «Дополнительных параметрах» пула измените «Удостоверение» на эту учётную запись.
  4. Перезапустите пул.

Файловая база через веб-сервер с несколькими пользователями работает медленно и рискует повредиться при сбое сети. Для постоянной работы 5+ человек через интернет переходите на клиент-серверный вариант.

4. Подключение Apache к 1С

Apache выбирают для Linux и когда на машине уже крутится другой сайт. Публикация из Конфигуратора или webinst -apache24 дописывает в httpd.conf нужные строки. Если правите вручную, блок выглядит так (Windows):

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.25.1374/bin/wsap24.dll"

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

На Linux модуль называется wsap24.so и лежит в каталоге платформы, обычно /opt/1cv8/x86_64/<версия>/. Публикация там делается так же через webinst с ключом -apache24 и -confpath до конфигурационного файла Apache.

Что проверить после правки:

  1. httpd -t (на Linux apachectl configtest) — синтаксис без ошибок.
  2. Строка LoadModule для 1С в файле одна. При смене версии платформы старую строку замените, а не добавляйте вторую.
  3. Учётная запись службы Apache имеет доступ к каталогу публикации, а для файловой базы — и к каталогу базы.
  4. Служба Apache перезапущена.

Разрядность Apache и платформы 1С должна совпадать так же, как в IIS: 64-разрядный wsap24.dll не загрузится в 32-разрядный Apache.

5. Порты и сеть между веб-сервером и кластером 1С

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

На брандмауэре сервера 1С откройте входящие подключения с адреса веб-сервера на все три значения. Закрытый диапазон рабочих процессов даёт неприятный симптом: соединение вроде бы начинается, а потом отваливается по таймауту.

Ещё два сетевых момента:

  • 🧭 Имя сервера 1С из строки Srvr= должно разрешаться с веб-сервера. Проверьте ping srv1c. Если DNS нет, добавьте запись в C:\Windows\System32\drivers\etc\hosts.
  • 🔒 Наружу из интернета открывайте только 443 на веб-сервере. Порты кластера в интернет не публикуются никогда.

6. HTTPS и защита опубликованной базы

Базу, доступную снаружи, без HTTPS публиковать нельзя: логин и пароль 1С уйдут открытым текстом.

IIS

  1. Получите сертификат: коммерческий или бесплатный Let’s Encrypt (на Windows его удобно выпускать и продлевать утилитой win-acme).
  2. В диспетчере IIS: сайт → «Привязки» → добавить тип https, порт 443, выбрать сертификат.
  3. Перенаправление с http на https настройте модулем URL Rewrite или просто закройте порт 80 снаружи.

Apache

Включите mod_ssl, создайте VirtualHost *:443 с директивами SSLEngine on, SSLCertificateFile и SSLCertificateKeyFile. Блок публикации 1С оставьте общим или перенесите внутрь этого виртуального хоста.

Минимум по безопасности

  • 🔑 У всех пользователей базы задан пароль; пользователь без пароля при внешней публикации — открытая дверь.
  • 🚫 Публикуйте только нужное. OData и веб-сервисы, которые никто не использует, снимите галочками.
  • 🧱 Если есть VPN, лучше оставить базу внутри него, а наружу не выставлять вообще.
  • 📝 Включите журналы IIS или Apache и периодически смотрите, кто стучится в публикацию.
Диагностика: выберите симптом

7. Диагностика: как найти причину, если опубликованная база не открывается

Когда ошибка не из списка выше, идите по цепочке от браузера к базе:

  1. Откройте адрес прямо на веб-сервере: http://localhost/buh. Работает локально, но не снаружи — проблема в брандмауэре, DNS или привязках, а не в 1С.
  2. Посмотрите журнал событий Windows («Приложение»): IIS пишет туда ошибки загрузки модуля. У Apache смотрите logs\error.log.
  3. Проверьте подключение к кластеру с веб-сервера. Утилитой rac (из того же каталога bin, при запущенной службе ras на сервере 1С) выполните rac cluster list srv1c:1545. Если кластер не виден — проблема сетевая.
  4. Подключитесь тонким клиентом по адресу http://web01/buh (тип подключения «На веб-сервере»). Если тонкий клиент работает, а браузер нет — смотрите настройки браузера: всплывающие окна и блокировщики.
  5. Включите технологический журнал на веб-сервере, если всё остальное чисто. Файл logcfg.xml кладут в каталог conf платформы.

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

8. Как ускорить веб-клиент на внешнем сервере

Веб-клиент чувствителен к задержкам сети: каждое действие — это обращения к серверу. Что реально помогает:

  • 📍 Ставьте веб-сервер рядом с кластером. Между ними должна быть локальная сеть, а не канал между городами.
  • 🗜️ Включите сжатие статического и динамического содержимого в IIS (или mod_deflate в Apache). Трафик до пользователя заметно уменьшается.
  • ♻️ Перенесите переработку пула на ночь. По умолчанию IIS перезапускает пул каждые 1740 минут, то есть около 29 часов, и время «плавает». В «Дополнительных параметрах» пула отключите регулярный интервал и задайте конкретное время, например 03:00. Иначе пул перезапустится посреди рабочего дня и выкинет пользователей.
  • ⏱️ Увеличьте «Время простоя» пула (по умолчанию 20 минут) или установите 0, чтобы первый вход утром не ждал загрузки модуля.
  • 🧑‍💻 Предлагайте тонкий клиент через веб-сервер тем, кто работает в базе целый день. Он быстрее браузера, а публикация та же.
  • 🌍 Браузер. Используйте актуальные Chrome, Edge, Firefox или Яндекс Браузер; старые версии хуже работают с веб-клиентом.

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

Можно ли опубликовать одну базу на двух веб-серверах?
Да. Каждый веб-сервер публикует базу независимо, с одной и той же строкой соединения. Так делают для резерва или для разделения внутренних и внешних пользователей.
Нужна ли лицензия 1С на веб-сервер?
На сам модуль расширения веб-сервера отдельной лицензии нет. Пользователи, вошедшие через веб-клиент, занимают клиентские лицензии так же, как при обычном входе.
Как сделать адрес без имени публикации, например просто https://1c.firma.ru?
Создайте в IIS отдельный сайт с привязкой к этому имени и опубликуйте базу в его корень, либо настройте перенаправление с корня на /buh.
Что делать после обновления платформы на сервере 1С?
Поставьте ту же версию на веб-сервер и переопубликуйте базы: путь к модулю в настройках IIS и строке LoadModule Apache содержит номер версии. Старую платформу удаляйте после проверки.
Можно ли публиковать базу на Linux-сервере, если сервер 1С на Windows?
Да. Веб-сервер и кластер общаются по сети, ОС у них может быть разной. Главное — одинаковый номер платформы.