Публикация базы 1С на веб-сервере Apache: пошаговая настройка

· 9 мин

Содержание

Веб-клиент 1С, тонкий клиент по HTTP, обмен через web- и http-сервисы — всё это работает только после того, как база опубликована на веб-сервере. Apache тут выступает «прослойкой»: принимает запрос браузера на http://сервер/base, передаёт его модулю расширения 1С, а тот уже общается с информационной базой.

Чтобы связка заработала, нужны три вещи: установленный Apache, модуль расширения из комплекта платформы (wsap24.dll на Windows, wsap24.so на Linux) и файл публикации default.vrd с описанием базы. Ниже — как собрать это руками и где обычно всё ломается.

С чего начать: версии, разрядность, порядок установки

Самая частая причина, по которой публикация не стартует, — несовпадение разрядности. Модуль расширения 1С должен быть той же разрядности, что и Apache. 64-битный Apache загружает только 64-битный wsap24.dll, 32-битный — только 32-битный. Платформу и веб-сервер ставьте одной битности, обычно x64.

Что понадобится до публикации:

  • 🧩 Платформа 1С:Предприятие 8.3 с установленным компонентом «Модули расширения веб-сервера» (галочка в мастере установки платформы).
  • 🌐 Apache 2.4 — именно под эту ветку в платформе идёт модуль wsap24. Для старых сборок Apache 2.2 модуль назывался wsap22, но сегодня он уже неактуален.
  • 📂 Доступ к информационной базе: строка подключения к файловой базе (путь к каталогу) или адрес кластера серверов для клиент-серверной.
  • 🔑 Права администратора на сервере — Apache ставится как служба, а конфигуратор правит файл конфигурации веб-сервера.

Для Windows удобнее ставить Apache из официальных сборок (Apache Lounge и подобные) в простой путь без пробелов и кириллицы, например C:\Apache24. Пробелы и русские буквы в путях к модулю и к базе — источник половины непонятных ошибок публикации.

Проверьте, что Apache сам по себе запускается и отдаёт стандартную страницу: откройте в браузере http://localhost/. Если «It works!» не появляется — сначала чините веб-сервер, публикация 1С тут ни при чём.

Готовность к публикации
Выполнено: 0 / 5

Публикация базы через конфигуратор

Штатный способ — мастер публикации. Он сам пропишет LoadModule, создаст каталог публикации и положит туда default.vrd.

  1. Запустите базу в режиме Конфигуратор от имени пользователя с правом администрирования.
  2. Откройте меню Администрирование → Публикация на веб-сервере….
  3. В поле Имя задайте короткое латинское имя публикации — оно станет частью адреса (http://сервер/base).
  4. В поле Веб-сервер выберите Apache 2.4 (если установлено несколько, покажется список).
  5. В поле Каталог укажите папку, куда лягут файлы публикации, например C:\inetpub\wwwroot\base.
  6. Отметьте галочками, что публикуете: тонкий клиент и веб-клиент, Web-сервисы, HTTP-сервисы, стандартный интерфейс OData — лишнее лучше не включать.
  7. Нажмите Опубликовать и согласитесь на перезапуск веб-сервера.

После этого в каталоге появится default.vrd, а в конфиг Apache (httpd.conf или отдельный включаемый файл) добавятся директивы загрузки модуля и описание каталога публикации. Фрагмент выглядит примерно так:

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

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

Сам default.vrd — это XML со строкой подключения к базе. Для файловой базы в нём указан путь, для клиент-серверной — адрес кластера и имя базы:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
    base="/base"
    ib="File=&quot;C:\bases\Buh&quot;;">
</point>

Require all granted — синтаксис Apache 2.4. Старые сборки 1С иногда писали в конфиг директивы в стиле 2.2 (Order allow,deny / Allow from all), и на чистом 2.4 это вызывает ошибку запуска службы. Если Apache после публикации не стартует — загляните в конфиг и приведите блок доступа к синтаксису 2.4.

Проверка: откройте http://localhost/base. Должно появиться окно входа в базу через веб-клиент. Для тонкого клиента в окне запуска добавьте информационную базу с типом расположения «На веб-сервере» и тем же адресом.

Публикация из командной строки через webinst

Когда конфигуратора под рукой нет (чистый Linux-сервер, автоматизация, разворачивание по скрипту), публикуют утилитой webinst из каталога bin платформы.

Пример для файловой базы на Windows:

webinst -apache24 -wsdir base -dir "C:\inetpub\wwwroot\base" ^
  -connstr "File=C:\bases\Buh;" ^
  -confPath "C:\Apache24\conf\httpd.conf"

Для клиент-серверной базы меняется только строка подключения:

-connstr "Srvr=server-1c;Ref=buh;"

На Linux вызов аналогичный, с модулем wsap24.so и путём к apache2.conf/отдельному конфигу. Утилита создаст default.vrd и добавит директивы в указанный файл конфигурации. После этого веб-сервер нужно перезапустить вручную (systemctl restart apache2 или перезапуск службы Apache на Windows).

Ключ -apache24 говорит утилите, под какую ветку веб-сервера генерировать директивы, -wsdir задаёт имя публикации (часть адреса), -dir — физический каталог, -connstr — строку подключения к базе. Полный список параметров webinst показывает по запуску без аргументов. Этой же утилитой публикацию снимают — тем же вызовом с ключом удаления вместо создания, после чего из конфига уходят добавленные директивы.

Командная публикация удобна тем, что её легко повторить: один и тот же вызов на нескольких серверах даёт одинаковый результат, а параметры видно в скрипте, а не в полях диалога.

Отдельная подсказка по Linux: модуль лежит в каталоге версии платформы, например /opt/1cv8/x86_64/8.3.25.1234/wsap24.so. Этот же путь должен попасть в директиву LoadModule. Если ставили платформу из .deb/.rpm, проверьте, что пакет с компонентом веб-сервера (1c-enterprise...-server или отдельный пакет модулей) действительно установлен.

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

Публикация открывает базу наружу, поэтому к правам отнеситесь серьёзно.

Учётная запись службы Apache. Служба Apache работает под какой-то учётной записью (на Windows по умолчанию Local System, на Linux — пользователь www-data). Именно этой учётке нужен доступ:

  • 📁 чтение каталога публикации с default.vrd;
  • ✏️ для файловой базы — чтение и запись в каталог самой базы и в каталог сеансовых данных;
  • 🔐 к сетевым путям — если база лежит на сетевой шаре, Local System к ней не дотянется, нужна доменная учётка с правами на шару.

Это типовая причина «ошибки 500» на файловой базе: публикация создалась, а служба физически не может писать в каталог базы.

HTTPS обязателен, если база доступна не только в локальной сети. Логины и пароли пользователей 1С по обычному HTTP идут практически открытым текстом. Поднимите mod_ssl, выпустите сертификат (внутренний УЦ или Let’s Encrypt для внешнего адреса) и перенаправляйте HTTP на HTTPS.

Аутентификация. 1С поддерживает вход по пользователям базы и по пользователям ОС (доменная аутентификация). Для прозрачного входа по доменной учётке настраивают соответствующие модули Apache и задают пользователям 1С вход по ОС-аккаунту. Если это не нужно — оставьте вход по паролю, но только поверх HTTPS.

Защитите сам default.vrd. В нём открытым текстом лежит строка подключения к базе. Каталог публикации не должен быть доступен на листинг, а сам .vrd — на скачивание. Проверьте, что http://сервер/base/default.vrd не отдаётся браузеру как файл. Отдельной директивой в блоке <Directory> закрывают доступ к файлам .vrd и к журналам.

Ограничьте публикуемый функционал. Если веб-доступ нужен только для работы пользователей через веб-клиент, не включайте в публикацию OData и HTTP-сервисы «на всякий случай». Каждый открытый интерфейс — это дополнительная поверхность атаки. Публикуйте только то, что реально используется; остальное всегда можно добавить позже повторной публикацией.

Не выставляйте файловую базу 1С в интернет «как есть». Файловый вариант не рассчитан на внешнюю нагрузку и параллельный доступ; для публикации в сеть используйте клиент-серверный вариант и закрывайте доступ фаерволом и VPN там, где можно.

Производительность: нагрузка, соединения, число процессов

Раздел про «пулы соединений» на практике сводится к трём вещам: тип базы, настройки MPM Apache и количество рабочих процессов 1С.

Файловая база плохо держит нагрузку. Несколько одновременных веб-сеансов к файловой базе быстро упираются в блокировки. Если пользователей больше 3–5 — переводите базу в клиент-серверный вариант. Это главный рычаг производительности, настройки Apache тут вторичны.

MPM Apache. На Windows Apache работает в режиме mpm_winnt — один процесс и пул потоков, число которых задаёт директива ThreadsPerChild. При росте числа веб-пользователей это значение поднимают. На Linux чаще используют mpm_event или mpm_worker с параметрами StartServers, ThreadsPerChild, MaxRequestWorkers — их подбирают под объём оперативной памяти сервера.

KeepAlive. Для веб-клиента 1С включённый KeepAlive On с разумным KeepAliveTimeout (несколько секунд) снижает накладные расходы на переустановку соединений.

Рабочие процессы 1С (для клиент-сервера). Реальную параллельную работу тянет кластер серверов 1С, а не Apache. Число рабочих процессов rphost и распределение по ним сеансов настраивается в консоли администрирования кластера, в свойствах рабочего сервера. Apache лишь проксирует запросы к кластеру.

Ориентиры по памяти грубые: один активный веб-сеанс 1С — это десятки мегабайт на стороне кластера плюс потоки Apache. Планируйте RAM с запасом и следите за реальным потреблением, а не за «магическими» значениями директив.

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

Когда публикация не открывается, источников правды два: журнал ошибок Apache (error.log в каталоге logs веб-сервера) и журнал регистрации самой базы. Начинайте всегда с error.log — в нём видно, загрузился ли модуль и на чём упал запрос.

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

Если после правок поведение не меняется — снимите публикацию (в конфигураторе та же форма, кнопка Отключить), убедитесь, что из конфига Apache исчезли директивы 1c-application, и опубликуйте базу заново. Иногда накопившиеся ручные правки в конфиге проще обнулить чистой публикацией, чем искать опечатку.

Поменяли версию платформы — обновите путь в LoadModule: он ссылается на конкретный номер версии в каталоге bin. После обновления 1С старый путь перестаёт существовать, и Apache падает на старте. Это стоит проверять первым делом после каждого обновления платформы.

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

Чем Apache лучше или хуже IIS для публикации 1С?
Функционально они равнозначны: веб-клиент, тонкий клиент по HTTP и сервисы работают одинаково. Apache кроссплатформенный и бесплатный, удобен на Linux. IIS встроен в Windows Server и проще интегрируется с доменной аутентификацией. Выбирайте по тому, что уже развёрнуто в инфраструктуре.
Можно ли опубликовать несколько баз на одном Apache?
Да. Каждая база публикуется в свой каталог со своим именем и своим default.vrd. В конфиге появится отдельный блок <Directory> и Alias на каждую публикацию, адреса будут вида /base1, /base2.
Нужна ли отдельная лицензия 1С для веб-доступа?
Отдельной «веб-лицензии» нет. Веб-сеанс расходует обычную клиентскую лицензию 1С так же, как подключение толстым клиентом. Считайте по числу одновременных пользователей.
Почему после обновления платформы публикация перестала работать?
Директива LoadModule ссылается на путь с конкретным номером версии платформы. После обновления каталог старой версии удаляется, путь к wsap24 становится недействительным. Опубликуйте базу заново (путь к модулю пропишется актуальный) или поправьте LoadModule вручную.
Как понять, какой именно модуль грузить — wsap24 или wsap22?
Для Apache 2.4 — wsap24, для устаревшего Apache 2.2 — wsap22. Сегодня используют 2.4, то есть wsap24.dll на Windows и wsap24.so на Linux. Номер в имени модуля соответствует ветке веб-сервера, а не версии 1С.