Публикация 1С через Apache, IIS и Nginx: от модуля до проверки
Содержание
Чтобы подключить 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)» и компоненты:
- «Расширения ISAPI» и «Фильтры ISAPI».
- «Совместимость управления IIS 6» — без неё Конфигуратор не умеет публиковать в IIS.
- «Обычная проверка подлинности» и «Проверка подлинности Windows» — если нужен вход по паролю или доменная авторизация.
Если платформа 32-битная, в настройках пула приложений включите «Разрешить 32-разрядные приложения».
Права на каталоги
Пользователь, от имени которого работает веб-сервер, должен читать каталог bin платформы и каталог публикации. Для файловой базы ему нужны ещё права на изменение каталога базы. Для IIS это группа IIS_IUSRS, для Apache — учётная запись службы.
Публикация базы 1С на веб-сервере
Через Конфигуратор на Windows
- Запустите Конфигуратор от имени администратора — иначе он не сможет записать конфиг Apache и каталог публикации.
- Откройте
Администрирование → Публикация на веб-сервере. - Укажите имя публикации (оно станет частью адреса, латиницей, например
buh), веб-сервер и каталог. - Отметьте, что публиковать: тонкий клиент и веб-клиент, веб-сервисы, HTTP-сервисы, стандартный интерфейс OData.
- Нажмите «Опубликовать» и согласитесь на перезапуск веб-сервера.
Перезапуск 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="srv1c";Ref="buh";">
<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-сервисы, без интерактивного входа.
Не прописывайте логин и пароль в строке подключения публикации и в адресе ссылки. Такая публикация пускает в базу любого, кто знает адрес.
Ограничение доступа
- Публикуйте только нужное. Веб-клиент наружу не нужен — не отмечайте его, оставьте HTTP-сервисы.
- Ограничьте адреса: в Nginx —
allow/deny, в Apache —Require ip. - Не открывайте наружу порты сервера 1С (1540, 1541 и диапазон рабочих процессов). Снаружи должен быть виден только 443.
- Для сотрудников вне офиса надёжнее 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 пользователей веб-клиента значения по умолчанию обычно хватает, для интеграций с потоком запросов его поднимают. - ⚡ Таймауты. Если долгие отчёты обрываются, поднимите таймаут на прокси, а не на стороне пользователя.
Проверка и мониторинг соединения
Первая проверка
- Откройте в браузере
http://server/buh/— должна появиться форма входа 1С или рабочий стол базы. - Проверьте тонкий клиент: в списке баз
Добавить → Добавление в список существующей информационной базы, тип расположения «На веб-сервере», адресhttps://1c.example.ru/buh/. - Проверьте интеграционные адреса из консоли:
# 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.logApache или журналы IIS показывают коды ответов и время запросов. - 📊 Журнал регистрации 1С. Ошибки обработчиков HTTP-сервисов и входы пользователей.
- 📊 Технологический журнал. Настраивается файлом
logcfg.xmlна сервере 1С. Включайте на время разбора проблемы: журнал быстро растёт. - 📊 Внешняя проверка. Простой запрос к служебному HTTP-сервису раз в несколько минут из системы мониторинга сразу покажет, что публикация упала.
Частые вопросы
Можно ли опубликовать файловую базу на веб-сервере?
File="D:\Bases\buh";. Учётной записи веб-сервера нужны права на изменение каталога базы. Для десятков пользователей лучше перейти на клиент-серверный вариант.Нужна ли отдельная лицензия на веб-сервер?
Можно ли опубликовать несколько баз на одном Apache?
default.vrd. Строка LoadModule при этом одна на весь сервер, и все базы должны работать на одной версии платформы.Что делать после обновления платформы?
LoadModule на новую версию. Иначе веб-сервер будет загружать модуль старой платформы, и подключение к кластеру новой версии не заработает.