Веб-доступ к базе 1С через Apache 2.4: от установки до HTTPS
Содержание
Чтобы опубликовать 1С на Apache, нужны три вещи: Apache 2.4 той же разрядности, что и платформа, установленный компонент «Модули расширения веб-сервера» и команда публикации — из Конфигуратора (Администрирование → Публикация на веб-сервере) или утилитой webinst. После этого база открывается в браузере по адресу вида http://сервер/buh.
Сама публикация занимает пять минут. Время уходит на другое: Apache не стартует из-за разрядности модуля, после обновления платформы веб-клиент ругается на версию, а база смотрит в интернет без HTTPS. Порядок действий для Windows и Linux одинаков, различаются только пути и команды.
1. Подготовка сервера к публикации 1С на Apache
Схема простая: браузер или тонкий клиент обращается к Apache, Apache через модуль 1С передаёт запрос в информационную базу. Для клиент-серверной базы модуль подключается к серверу 1С, для файловой — открывает файлы базы прямо из процесса Apache.
Что проверить заранее
- 🖥️ ОС. Windows Server 2016 и новее либо Linux (Ubuntu, Debian, RHEL-совместимые). Apache — только ветка 2.4.
- 🔢 Разрядность. 64-битная платформа 1С работает только с 64-битным Apache. Смешивать нельзя.
- 📦 Компонент платформы. При установке 1С отметьте «Модули расширения веб-сервера». Если платформа уже стоит, запустите установщик ещё раз и выберите «Изменить».
- 🔐 Права. Конфигуратор для публикации запускают от имени администратора: он записывает изменения в
httpd.conf. - 🌐 Порты. 80 и 443 должны быть свободны. В Windows их часто занимает IIS — остановите его или уберите привязку.
Установка Apache в Windows
Официальных сборок под Windows проект Apache не выпускает. Обычно берут сборку Apache Lounge (Win64). Для неё нужен пакет Visual C++ Redistributable той версии, что указана на странице загрузки.
- Распакуйте архив в
C:\Apache24. - В
conf\httpd.confпроверьтеDefine SRVROOT "C:/Apache24"и строкуServerName localhost:80. - Зарегистрируйте службу из командной строки администратора:
cd C:\Apache24\bin
httpd.exe -k install
httpd.exe -k start
Откройте http://localhost — должна появиться страница «It works!».
Установка Apache в Linux
В Ubuntu и Debian:
sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2
Платформу 1С на сервере ставьте с компонентом веб-модулей. Модуль окажется в каталоге вида /opt/1cv8/x86_64/8.3.xx.xxxx/wsap24.so.
2. Модуль 1С для Apache: нужен ли mod_fcgid
Не нужен. 1С не работает через FastCGI. Платформа ставит собственный модуль Apache:
| ОС | Файл модуля | Где лежит |
|---|---|---|
| Windows | wsap24.dll | C:\Program Files\1cv8\8.3.xx.xxxx\bin\ |
| Linux | wsap24.so | /opt/1cv8/x86_64/8.3.xx.xxxx/ |
Модуль подключается одной строкой LoadModule _1cws_module. Обработчик для каталога публикации — SetHandler 1c-application. Ни mod_fcgid, ни mod_proxy для самой публикации не нужны.
mod_fcgid пригодится, только если на том же Apache крутится PHP-сайт. Тогда он соседствует с модулем 1С и не мешает ему. А вот mod_proxy полезен в другой схеме: внешний Apache или nginx принимает HTTPS и проксирует запросы на внутренний Apache с публикацией.
Номер версии платформы входит в путь к модулю. Это главная причина поломок после обновления — подробнее в разделе 8.
3. Публикация базы 1С на веб-сервере
Есть два способа. Результат одинаковый: в конфигурации Apache появляется блок публикации, а в каталоге публикации — файл default.vrd.
Способ 1. Через Конфигуратор (Windows)
- Запустите 1С от имени администратора, откройте базу в Конфигураторе.
- Меню
Администрирование → Публикация на веб-сервере. - Выберите веб-сервер «Apache 2.4».
- Задайте Имя — это часть адреса, например
buh. Латиница, без пробелов. - Укажите Каталог, например
C:\Apache24\htdocs\buh. - Отметьте, что публиковать: тонкий и веб-клиент, веб-сервисы, HTTP-сервисы, OData.
- Нажмите «Опубликовать» и согласитесь на перезапуск Apache.
Перезапуск Apache обрывает все веб-сеансы. В рабочее время предупредите пользователей.
Способ 2. Утилитой webinst (Windows и Linux)
На сервере без графики Конфигуратор не нужен. webinst лежит рядом с платформой:
sudo /opt/1cv8/x86_64/8.3.xx.xxxx/webinst -publish -apache24 \
-wsdir buh \
-dir /var/www/buh \
-connstr "Srvr=srv1c;Ref=buh;" \
-confpath /etc/apache2/apache2.conf
sudo systemctl restart apache2
Для файловой базы строка подключения выглядит так: File="/srv/1c/buh";. Снять публикацию — тот же вызов с ключом -delete.
Что появится в конфигурации
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.xx.xxxx/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>
Файл default.vrd описывает точку публикации: атрибут base — адрес (/buh), атрибут ib — строка подключения к базе. Его можно править руками, после правки перезапустите Apache.
Права на каталоги
- 🪟 Windows, файловая база. Учётная запись службы Apache должна иметь права на изменение каталога базы. По умолчанию служба работает от «Локальной системы»; если вы сменили её на отдельного пользователя — выдайте ему права.
- 🐧 Linux. Пользователь Apache (
www-dataв Ubuntu) читает каталог публикации. Для файловой базы ему нужна ещё и запись в каталог базы. - 🗄️ Клиент-серверная база . Модуль ходит к серверу 1С по сети. Нужен доступ к порту агента 1540, менеджера кластера 1541 и к диапазону портов рабочих процессов.
Проверка: откройте http://сервер/buh — должно появиться окно входа 1С. Тонкий клиент подключается к этой же базе по адресу публикации, если в списке баз выбрать тип «На веб-сервере».
4. Виртуальный хост Apache для опубликованной базы
Публикация в основном конфиге работает, но при нескольких базах и доменах удобнее вынести её в отдельный виртуальный хост. Так проще включать HTTPS, вести отдельные логи и отключать одну базу, не трогая остальные.
Пример для Ubuntu — файл /etc/apache2/sites-available/1c.conf:
<VirtualHost *:80>
ServerName 1c.example.ru
Alias "/buh" "/var/www/buh/"
<Directory "/var/www/buh/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/buh/default.vrd"
</Directory>
ErrorLog ${APACHE_LOG_DIR}/1c_error.log
CustomLog ${APACHE_LOG_DIR}/1c_access.log combined
</VirtualHost>
Строку LoadModule _1cws_module оставьте в общем конфиге, а блок Alias/Directory, который добавил webinst, перенесите в виртуальный хост. Иначе одна и та же публикация будет описана дважды.
sudo a2ensite 1c.conf
sudo apachectl configtest
sudo systemctl reload apache2
В Windows виртуальные хосты подключают через conf\extra\httpd-vhosts.conf: раскомментируйте строку Include conf/extra/httpd-vhosts.conf в httpd.conf.
Несколько баз на одном домене — это несколько пар Alias/Directory с разными именами: /buh, /zup, /ut. У каждой свой каталог и свой default.vrd.
5. HTTPS и безопасность веб-публикации 1С
Публикация на голом HTTP годится только для локальной сети. Пароли пользователей 1С при входе через веб-клиент идут в запросе — без шифрования их видно любому на пути.
Включаем HTTPS
В Linux с публичным доменом быстрее всего Let’s Encrypt:
sudo a2enmod ssl headers
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d 1c.example.ru
Certbot сам создаст хост на 443 порту и предложит перенаправлять HTTP на HTTPS. Вручную блок выглядит так:
<VirtualHost *:443>
ServerName 1c.example.ru
SSLEngine on
SSLCertificateFile /etc/ssl/1c/fullchain.pem
SSLCertificateKeyFile /etc/ssl/1c/privkey.pem
# Alias и Directory публикации — как в разделе 4
</VirtualHost>
В Windows раскомментируйте в httpd.conf строки LoadModule ssl_module и Include conf/extra/httpd-ssl.conf, затем укажите пути к сертификату и ключу в httpd-ssl.conf.
Что ещё закрыть
- 🔑 Пароли в базе. У каждого пользователя 1С — свой пароль. Пустой пароль администратора при публикации наружу — открытая дверь.
- 🧱 Доступ по IP. Если работают только из офиса, замените
Require all grantedнаRequire ip 203.0.113.0/24. - 🚪 Лишние сервисы. Не публикуйте OData и веб-сервисы, если ими никто не пользуется.
- 🙈 Версия сервера.
ServerTokens ProdиServerSignature Offубирают версию Apache из ответов. - 🔒 Лучше VPN. Для бухгалтерии на десять человек VPN надёжнее открытого порта 443.
Не публикуйте в интернет базу, где есть пользователь без пароля. Боты перебирают типовые адреса вида /buh, /zup, /trade постоянно.
6. Производительность публикации 1С при большом числе пользователей
Apache в этой схеме — тонкая прослойка. Основную работу делает сервер 1С и СУБД. Поэтому оптимизация начинается с правильной архитектуры, а не с тонкой настройки Apache.
| Ситуация | Что делать |
|---|---|
| Файловая база, больше 5–10 пользователей через веб | Переводить базу на клиент-серверный вариант |
| Клиент-серверная база, Apache и 1С на одной машине | Нормально, пока хватает памяти и ядер |
| Десятки веб-пользователей, растёт нагрузка | Выносить Apache на отдельный сервер |
| Внешний доступ из интернета | Ставить HTTPS-прокси (nginx или Apache) перед публикацией |
С файловой базой через веб все сеансы работают внутри процесса Apache и делят одну блокировку файла. При росте числа пользователей это первое узкое место.
Настройки Apache в Windows
В Windows Apache работает модулем mpm_winnt: один рабочий процесс с потоками. По умолчанию потоков 64. Для 50 и более активных веб-пользователей поднимите их в httpd.conf:
<IfModule mpm_winnt_module>
ThreadsPerChild 250
MaxConnectionsPerChild 0
</IfModule>
Настройки в Linux
Посмотрите, какой MPM включён: apachectl -V | grep MPM. Для event и worker число одновременно обслуживаемых запросов ограничивают MaxRequestWorkers и ThreadsPerChild в /etc/apache2/mods-available/mpm_event.conf (или mpm_worker.conf). Поднимайте лимиты постепенно и следите за памятью.
Что даёт заметный эффект
- ⚡ Держите
KeepAlive On— веб-клиент делает много мелких запросов подряд. - 📶 Сжатие
mod_deflateдля текстовых ответов уменьшает трафик на медленных каналах. - 🧮 Следите за памятью процессов
rphostна сервере 1С: тормоза веб-клиента чаще оттуда, чем из Apache. - 🪪 Лицензии. Сеанс веб-клиента занимает клиентскую лицензию так же, как тонкий клиент. При нехватке лицензий база просто не пустит новых пользователей.
7. Ошибки при публикации 1С на Apache
Начинайте всегда с проверки синтаксиса: в Windows httpd.exe -t, в Linux apachectl configtest. Затем смотрите error.log Apache — модуль 1С пишет туда причины отказов.
Если публикация не сохраняется из Конфигуратора
Кнопка «Опубликовать» срабатывает, но в httpd.conf ничего не меняется. Почти всегда это запуск Конфигуратора без прав администратора. Закройте его и откройте через «Запуск от имени администратора».
8. Обновление платформы, резервные копии и автоматизация
Обновили платформу — проверьте публикацию в тот же день. Старая строка LoadModule продолжает указывать на каталог прежней версии. Если старую версию удалили, Apache не запустится. Если оставили — веб-клиент будет конфликтовать с сервером 1С новой версии.
Порядок при обновлении платформы
- Установите новую версию платформы с компонентом веб-модулей.
- Поправьте путь в
LoadModule _1cws_moduleна новый каталог. - Проверьте синтаксис (
httpd.exe -tилиapachectl configtest). - Вне рабочего времени перезапустите Apache — веб-сеансы оборвутся.
- Откройте базу в браузере и войдите под тестовым пользователем.
Автоматизация замены версии
На Linux помогает переопубликация через webinst из скрипта: она пропишет модуль новой версии.
#!/bin/bash
# Использование: ./republish.sh 8.3.xx.xxxx
VER="$1"
BIN="/opt/1cv8/x86_64/$VER"
sudo "$BIN/webinst" -publish -apache24 -wsdir buh -dir /var/www/buh \
-connstr "Srvr=srv1c;Ref=buh;" -confpath /etc/apache2/apache2.conf
sudo apachectl configtest && sudo systemctl restart apache2
Проверьте после первого прогона, что в конфиге не осталось двух строк LoadModule _1cws_module — Apache не загрузит модуль дважды. В Windows то же делается PowerShell-скриптом, который заменяет номер версии в httpd.conf, или повторной публикацией из Конфигуратора новой версии.
Что включить в резервные копии
- 📄
httpd.conf, файлы виртуальных хостов иhttpd-ssl.conf. - 📄 Все
default.vrdиз каталогов публикации. - 🔑 Сертификаты и закрытые ключи (с ограниченным доступом).
- 🗄️ Сами базы — штатными средствами: выгрузка
.dt, резервное копирование СУБД или копия каталога файловой базы при остановленной работе.
С копией конфигов восстановление публикации на новом сервере занимает минуты: установить Apache и платформу, вернуть файлы, поправить пути.
Частые вопросы о публикации 1С на Apache
Можно ли опубликовать на Apache файловую базу?
File="путь". Подходит для небольшого числа пользователей; при росте нагрузки базу лучше перевести на сервер 1С.Какой Apache выбрать: 2.2 или 2.4?
Нужен ли сервер 1С для работы через браузер?
Можно ли подключить тонкий клиент к публикации?
https://1c.example.ru/buh.Как опубликовать несколько баз на одном Apache?
/buh, /zup, /ut, все они обслуживаются одним модулем.