Публикация базы 1С на веб-сервере Apache: пошаговая настройка
Содержание
Веб-клиент 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С тут ни при чём.
Публикация базы через конфигуратор
Штатный способ — мастер публикации. Он сам пропишет LoadModule, создаст каталог публикации и положит туда default.vrd.
- Запустите базу в режиме Конфигуратор от имени пользователя с правом администрирования.
- Откройте меню
Администрирование → Публикация на веб-сервере…. - В поле Имя задайте короткое латинское имя публикации — оно станет частью адреса (
http://сервер/base). - В поле Веб-сервер выберите Apache 2.4 (если установлено несколько, покажется список).
- В поле Каталог укажите папку, куда лягут файлы публикации, например
C:\inetpub\wwwroot\base. - Отметьте галочками, что публикуете: тонкий клиент и веб-клиент, Web-сервисы, HTTP-сервисы, стандартный интерфейс OData — лишнее лучше не включать.
- Нажмите Опубликовать и согласитесь на перезапуск веб-сервера.
После этого в каталоге появится 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="C:\bases\Buh";">
</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 — в нём видно, загрузился ли модуль и на чём упал запрос.
Order allow,deny). Приведите блок <Directory> к синтаксису Apache 2.4 (Require all granted) и перезапустите службу. Проверьте конфиг командой запуска Apache с ключом проверки синтаксиса.wsap24.dll/wsap24.so в директиве LoadModule или не совпадает разрядность модуля и Apache. Пропишите точный путь к модулю из каталога установленной версии платформы и поставьте веб-сервер той же битности.default.vrd: неправильный путь к файловой базе или адрес кластера. Откройте .vrd и сверьте значение ib= со строкой подключения, которая работает в толстом клиенте.access.log — какие файлы вернули ошибку.Если после правок поведение не меняется — снимите публикацию (в конфигураторе та же форма, кнопка Отключить), убедитесь, что из конфига Apache исчезли директивы 1c-application, и опубликуйте базу заново. Иногда накопившиеся ручные правки в конфиге проще обнулить чистой публикацией, чем искать опечатку.
Поменяли версию платформы — обновите путь в LoadModule: он ссылается на конкретный номер версии в каталоге bin. После обновления 1С старый путь перестаёт существовать, и Apache падает на старте. Это стоит проверять первым делом после каждого обновления платформы.
Частые вопросы
Чем Apache лучше или хуже IIS для публикации 1С?
Можно ли опубликовать несколько баз на одном Apache?
default.vrd. В конфиге появится отдельный блок <Directory> и Alias на каждую публикацию, адреса будут вида /base1, /base2.Нужна ли отдельная лицензия 1С для веб-доступа?
Почему после обновления платформы публикация перестала работать?
LoadModule ссылается на путь с конкретным номером версии платформы. После обновления каталог старой версии удаляется, путь к wsap24 становится недействительным. Опубликуйте базу заново (путь к модулю пропишется актуальный) или поправьте LoadModule вручную.Как понять, какой именно модуль грузить — wsap24 или wsap22?
wsap24, для устаревшего Apache 2.2 — wsap22. Сегодня используют 2.4, то есть wsap24.dll на Windows и wsap24.so на Linux. Номер в имени модуля соответствует ветке веб-сервера, а не версии 1С.