Публикация 1С через Apache, IIS и Nginx: от модуля до проверки

· 9 мин

Содержание

Чтобы подключить 1С к веб-серверу, нужны три вещи: модуль расширения веб-сервера из дистрибутива платформы, сам веб-сервер (Apache 2.4 или IIS) и публикация базы. Публикацию делают в Конфигураторе: Администрирование → Публикация на веб-сервере, на Linux — утилитой webinst. После этого база открывается в браузере по адресу вида http://server/base/.

Nginx напрямую с 1С не работает : модуля для него нет. Его ставят перед Apache или IIS как обратный прокси — для HTTPS, сжатия и защиты.

Протокол подключения: HTTP, HTTPS и место WebSocket

Веб-клиент, тонкий клиент через веб-сервер, HTTP-сервисы, веб-сервисы и OData работают поверх HTTP. Выбор на деле один: открытый HTTP или HTTPS.

ВариантКогда подходитРиски
HTTPЛокальная сеть, тестовая база, проверка публикацииЛогин и пароль идут открытым текстом
HTTPSЛюбой доступ из интернета, интеграции с внешними сервисамиНужен сертификат и его продление
HTTPS через NginxНесколько баз, один внешний адрес, Let’s EncryptЕщё один узел, который надо настраивать

WebSocket для публикации базы не выбирают. Его использует сервер системы взаимодействия (чат, уведомления, видеозвонки в 1С). Если такой сервер стоит за Nginx, в прокси нужно пропускать заголовки Upgrade и Connection — иначе соединение не поднимется.

Даже во внутренней сети HTTPS лучше включить сразу. Переводить готовые обмены и ярлыки пользователей с http:// на https:// потом дольше, чем настроить сертификат один раз.

Подготовка веб-сервера к подключению 1С

Модуль расширения из дистрибутива платформы

При установке платформы отметьте компонент «Модули расширения веб-сервера». Без него публиковать нечего. Модули лежат в каталоге bin нужной версии:

  • 🧩 wsap24.dll — для Apache 2.4 на Windows;
  • 🧩 wsisapi.dll — для IIS;
  • 🧩 libwsap24.so — для Apache 2.4 на Linux, путь вида /opt/1cv8/x86_64/8.3.xx.xxxx/.

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

Apache, IIS или Nginx

Веб-серверПлюсыМинусы
Apache 2.4Работает на Windows и Linux, конфиг в одном файле, webinst правит его самНа Windows ставится вручную, сборки берут со сторонних сайтов
IISУже есть в Windows Server, доменная аутентификацияМного компонентов, путаница с пулами и правами
NginxЛёгкий, удобный TLS, кэш, балансировкаТолько прокси перед Apache/IIS

Что включить в IIS

В «Диспетчере серверов» добавьте роль «Веб-сервер (IIS)» и компоненты:

  1. «Расширения ISAPI» и «Фильтры ISAPI».
  2. «Совместимость управления IIS 6» — без неё Конфигуратор не умеет публиковать в IIS.
  3. «Обычная проверка подлинности» и «Проверка подлинности Windows» — если нужен вход по паролю или доменная авторизация.

Если платформа 32-битная, в настройках пула приложений включите «Разрешить 32-разрядные приложения».

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

Пользователь, от имени которого работает веб-сервер, должен читать каталог bin платформы и каталог публикации. Для файловой базы ему нужны ещё права на изменение каталога базы. Для IIS это группа IIS_IUSRS, для Apache — учётная запись службы.

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

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

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

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

Через webinst на Linux

Утилита лежит рядом с платформой. Пример для серверной базы и Apache 2.4:

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

-wsdir — имя в адресе, -dir — каталог публикации, -connstr — строка подключения к базе. Для файловой базы строка вида File="/home/usr1cv8/buh";. Снять публикацию — тот же вызов с ключом -delete.

Что появляется в результате

В конфиге Apache добавляется блок такого вида:

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.xx.xxxx/bin/wsap24.dll"

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

Строка LoadModule должна быть в файле одна. Две строки с разными версиями платформы — частая причина того, что Apache не стартует.

В каталоге публикации лежит 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;;">
  <standardOdata enable="true"/>
</point>

Атрибут ib — та же строка подключения, кавычки в XML экранируются. Если база переехала на другой сервер, достаточно поправить ib и перезапустить веб-сервер , переопубликовывать не нужно.

Безопасность публикации: SSL, авторизация и доступ

HTTPS

На Apache сертификат подключают через mod_ssl, на IIS — через привязку https к сайту. Удобнее держать TLS на Nginx: сертификат Let’s Encrypt через certbot, сам Apache слушает только 127.0.0.1.

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;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_read_timeout 300s;
    }
}

proxy_read_timeout поднимают потому, что длинный отчёт или выгрузка в 1С легко работает дольше стандартных 60 секунд. client_max_body_size нужен для загрузки файлов в базу.

Авторизация

  • 🔑 Пользователи 1С. Вход по логину и паролю информационной базы. В браузере появится форма входа 1С, HTTP-сервисы принимают Basic-аутентификацию.
  • 🔑 Аутентификация ОС. Для домена: в IIS включите «Проверка подлинности Windows», у пользователя 1С отметьте аутентификацию операционной системы.
  • 🔑 Отдельный пользователь для интеграций. Внешней системе — свой пользователь 1С с ролью только на нужные HTTP-сервисы, без интерактивного входа.

Не прописывайте логин и пароль в строке подключения публикации и в адресе ссылки. Такая публикация пускает в базу любого, кто знает адрес.

Ограничение доступа

  1. Публикуйте только нужное. Веб-клиент наружу не нужен — не отмечайте его, оставьте HTTP-сервисы.
  2. Ограничьте адреса: в Nginx — allow/deny, в Apache — Require ip.
  3. Не открывайте наружу порты сервера 1С (1540, 1541 и диапазон рабочих процессов). Снаружи должен быть виден только 443.
  4. Для сотрудников вне офиса надёжнее VPN, чем публикация веб-клиента в интернет.

Интеграция через веб-сервер: HTTP-сервисы, OData и вебхуки

Публикация нужна не только людям. Через неё 1С обменивается данными с сайтом, CRM, маркетплейсом.

МеханизмАдресКогда выбирать
HTTP-сервисы (REST)/buh/hs/<корневой URL>/...Свой API, приём вебхуков, JSON
Стандартный интерфейс OData/buh/odata/standard.odata/Чтение и запись объектов без доработки конфигурации
Веб-сервисы (SOAP)/buh/ws/<имя>.1cws?wsdlСтарые интеграции, строгий контракт

HTTP-сервисы создаются в конфигурации или в расширении. Это основной способ принимать вебхуки: внешний сервис шлёт POST на адрес /hs/..., обработчик в 1С разбирает JSON и создаёт документ. Доработку лучше делать расширением, чтобы не снимать типовую конфигурацию с поддержки.

OData отдаёт данные без программирования, но состав объектов нужно разрешить в самой базе. В БП, ЗУП и УТ это делается обработкой настройки стандартного интерфейса OData в разделе Администрирование. Без этого шага запрос к $metadata вернёт пустой список.

Исходящие вебхуки 1С отправляет кодом. Минимальный пример POST-запроса с JSON:

Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/webhook/order");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(ТекстJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
    ЗаписьЖурналаРегистрации("Вебхук", УровеньЖурналаРегистрации.Ошибка, , ,
        "Код ответа: " + Формат(Ответ.КодСостояния, "ЧГ=0"));
КонецЕсли;

Для исходящих запросов публикация не нужна — веб-сервер требуется только для входящих.

Ошибки при подключении 1С к веб-серверу

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

Отдельно про IIS: если после публикации вместо базы приходит ошибка обработчика, проверьте, что установлены «Расширения ISAPI», а пул приложений настроен на нужную разрядность. Чаще всего это и есть причина.

Как ускорить работу 1С через веб-сервер

Скорость веб-клиента упирается не в веб-сервер, а в сеть и сервер 1С. Но несколько настроек дают заметный выигрыш.

  • ⚡ Веб-сервер рядом с кластером. Между веб-сервером и сервером 1С идёт много мелких запросов. Ставьте их в одну локальную сеть, а лучше на одну машину.
  • ⚡ Сжатие на прокси. Включите gzip в Nginx для application/json и текстовых типов — ответы HTTP-сервисов уменьшаются в разы.
  • ⚡ Переиспользование сеансов. Для HTTP-сервисов и веб-сервисов в default.vrd можно задать повторное использование сеансов. Тогда каждый запрос не открывает новый сеанс и не тратит время на вход.
<httpServices>
  <service name="ОбменССайтом" rootUrl="site" enable="true"
           reuseSessions="autouse" sessionMaxAge="20"
           poolSize="10" poolTimeout="5"/>
</httpServices>

Имя сервиса и rootUrl должны совпадать с метаданными конфигурации. reuseSessions="autouse" включает пул сеансов, poolSize ограничивает число одновременных сеансов сервиса.

  • ⚡ Потоки Apache на Windows. Параметр ThreadsPerChild в httpd.conf задаёт число одновременных соединений. Для 30–50 пользователей веб-клиента значения по умолчанию обычно хватает, для интеграций с потоком запросов его поднимают.
  • ⚡ Таймауты. Если долгие отчёты обрываются, поднимите таймаут на прокси, а не на стороне пользователя.

Проверка и мониторинг соединения

Первая проверка

  1. Откройте в браузере http://server/buh/ — должна появиться форма входа 1С или рабочий стол базы.
  2. Проверьте тонкий клиент: в списке баз Добавить → Добавление в список существующей информационной базы, тип расположения «На веб-сервере», адрес https://1c.example.ru/buh/.
  3. Проверьте интеграционные адреса из консоли:
# OData: список опубликованных объектов
curl -u integration:Пароль "https://1c.example.ru/buh/odata/standard.odata/\$metadata"

# HTTP-сервис
curl -u integration:Пароль -X POST -H "Content-Type: application/json" \
  -d '{"test": 1}' "https://1c.example.ru/buh/hs/site/ping"

Код 401 означает, что сервер ответил, но не принял логин. 404 — неверный путь или сервис не опубликован. 500 — ошибка внутри 1С, текст ищите в журнале регистрации.

Постоянный мониторинг

  • 📊 Логи веб-сервера. access.log и error.log Apache или журналы IIS показывают коды ответов и время запросов.
  • 📊 Журнал регистрации 1С. Ошибки обработчиков HTTP-сервисов и входы пользователей.
  • 📊 Технологический журнал. Настраивается файлом logcfg.xml на сервере 1С. Включайте на время разбора проблемы: журнал быстро растёт.
  • 📊 Внешняя проверка. Простой запрос к служебному HTTP-сервису раз в несколько минут из системы мониторинга сразу покажет, что публикация упала.
Перед тем как отдать публикацию пользователям
Выполнено: 0 / 7

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

Можно ли опубликовать файловую базу на веб-сервере?
Да. Строка подключения будет вида File="D:\Bases\buh";. Учётной записи веб-сервера нужны права на изменение каталога базы. Для десятков пользователей лучше перейти на клиент-серверный вариант.
Нужна ли отдельная лицензия на веб-сервер?
Отдельной лицензии на публикацию нет. Каждый сеанс веб-клиента или тонкого клиента через веб-сервер занимает обычную клиентскую лицензию.
Можно ли опубликовать несколько баз на одном Apache?
Да. У каждой базы своё имя публикации и свой каталог с default.vrd. Строка LoadModule при этом одна на весь сервер, и все базы должны работать на одной версии платформы.
Что делать после обновления платформы?
Переопубликуйте базы или поправьте путь к модулю в строке LoadModule на новую версию. Иначе веб-сервер будет загружать модуль старой платформы, и подключение к кластеру новой версии не заработает.
Можно ли использовать только Nginx без Apache и IIS?
Нет. Модуля 1С для Nginx нет. Nginx работает как прокси перед Apache или IIS, которые обрабатывают запросы через модуль платформы.