Веб-доступ к 1С через Apache на Linux: установка модуля, webinst, права и HTTPS
Содержание
Чтобы опубликовать базу 1С на веб-сервере Apache в Linux, нужны три вещи: Apache 2.4, установленный модуль расширения веб-сервера 1С (файл wsap24.so из каталога платформы) и запуск утилиты webinst с ключом -apache24. Утилита создаёт файл default.vrd в каталоге публикации и дописывает в конфигурацию Apache блок с LoadModule и Alias. После перезапуска Apache база открывается в браузере по адресу вида http://сервер/имя_публикации.
Типичная ситуация: офис переезжает с Windows-сервера на Linux, бухгалтеры работают удалённо, и им нужен веб-клиент или тонкий клиент через интернет без VPN. Порядок действий одинаков для Ubuntu/Debian и RHEL-совместимых систем (Rocky, AlmaLinux, РЕД ОС), различаются только пакеты, пути и пользователь Apache.
Подготовка Linux-сервера и установка Apache
Модуль 1С работает внутри процесса Apache, поэтому разрядность и версия веб-сервера важны. Для платформы 8.3 на 64-битном Linux нужен 64-битный Apache 2.4. Версии 2.2 и ниже в современных дистрибутивах уже не встречаются, и использовать их не стоит.
Ubuntu и Debian
sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2
apachectl -v
Главный файл конфигурации — /etc/apache2/apache2.conf, пользователь процесса — www-data, журнал ошибок — /var/log/apache2/error.log.
RHEL, Rocky, AlmaLinux
sudo dnf install httpd
sudo systemctl enable --now httpd
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
Здесь конфигурация лежит в /etc/httpd/conf/httpd.conf, пользователь — apache, журнал — /var/log/httpd/error_log. На этих системах по умолчанию включён SELinux, о нём ниже в разделе про права.
| Параметр | Ubuntu / Debian | RHEL / Rocky / Alma |
|---|---|---|
| Пакет | apache2 | httpd |
| Файл конфигурации | /etc/apache2/apache2.conf | /etc/httpd/conf/httpd.conf |
| Пользователь Apache | www-data | apache |
| Журнал ошибок | /var/log/apache2/error.log | /var/log/httpd/error_log |
Ключ webinst | -apache24 | -apache24 |
Сразу проверьте, что имя сервера 1С резолвится с веб-сервера: getent hosts имя_сервера. Кластер 1С отвечает по имени, под которым зарегистрирован, а не по IP. Если имени нет в DNS, пропишите его в /etc/hosts.
Установка платформы 1С для Linux с модулем веб-сервера
На машину с Apache ставится не клиент, а компонент «Модуль расширения веб-сервера». Если сервер 1С работает на той же машине, его ставят вместе с модулем. Номер версии модуля должен совпадать с номером версии сервера 1С до последней цифры.
Единый установщик (платформа 8.3.20 и новее)
Дистрибутив поставляется файлом setup-full-8.3.xx.xxxx-x86_64.run. Установка без диалогов:
chmod +x setup-full-8.3.xx.xxxx-x86_64.run
sudo ./setup-full-8.3.xx.xxxx-x86_64.run --mode unattended --enable-components server,ws
Компонент ws — это и есть модуль веб-сервера. Если сервер 1С стоит на другой машине, достаточно --enable-components ws. Файлы ложатся в /opt/1cv8/x86_64/8.3.xx.xxxx/.
Старые пакеты deb и rpm
На ранних релизах 8.3 платформу ставили набором пакетов: common, server и ws. Ставятся они по порядку — сначала общие, потом сервер, потом модуль. Каталог установки тогда — /opt/1C/v8.3/x86_64/.
После установки найдите модуль и утилиту:
ls /opt/1cv8/x86_64/*/ | grep -E 'wsap24|webinst'
Должны появиться wsap24.so и webinst. Если wsap24.so нет — компонент веб-сервера не установлен, повторите установку с ws.
Права доступа к каталогу публикации и к файловой базе
Apache работает от непривилегированного пользователя. Ему нужно читать каталог публикации, а для файловой базы — ещё и писать в каталог базы.
- Создайте каталог публикации, например
/var/www/buh. - Отдайте его пользователю Apache:
sudo mkdir -p /var/www/buh
sudo chown -R www-data:www-data /var/www/buh
- Для файловой базы выдайте права на её каталог (в нём лежит
1Cv8.1CD):
sudo chown -R www-data:www-data /srv/1c/buh
sudo chmod -R u+rwX /srv/1c/buh
На RHEL замените www-data на apache.
Файловую базу нельзя одновременно открывать через веб и напрямую по сетевой папке от другого пользователя Linux: возникнут конфликты прав на файлы блокировок, и часть пользователей получит отказ в доступе.
SELinux на RHEL-системах
Если права выставлены, а Apache всё равно получает отказ, причина почти всегда в SELinux. Проверьте режим getenforce и журнал отказов sudo ausearch -m avc -ts recent. Каталогу файловой базы нужен контекст на запись:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/srv/1c/buh(/.*)?"
sudo restorecon -Rv /srv/1c/buh
Если Apache должен подключаться к серверу 1С по сети, разрешите ему исходящие соединения: sudo setsebool -P httpd_can_network_connect on.
Отключать SELinux целиком (setenforce 0) ради 1С не нужно. Это снимает защиту со всего сервера, а проблему решают две команды выше.
Публикация базы через webinst и блок в конфигурации Apache
webinst лежит в каталоге платформы. Для клиент-серверной базы команда выглядит так:
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
Для файловой базы меняется только строка соединения: -connstr "File=/srv/1c/buh;".
Что значат ключи:
- 🔹
-wsdir— имя публикации, оно станет частью адреса; - 🔹
-dir— физический каталог, куда ляжетdefault.vrd; - 🔹
-connstr— строка соединения с базой, как в списке баз; - 🔹
-confPath— файл конфигурации Apache, в который утилита допишет блок.
После выполнения в конце конфигурации появится примерно такой фрагмент:
LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.xx.xxxx/wsap24.so"
# 1c publication
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>
Проверьте синтаксис и перезапустите Apache:
sudo apachectl configtest
sudo systemctl restart apache2
Перезапуск Apache обрывает сеансы всех пользователей, которые уже работают через веб. На рабочем сервере делайте это вне рабочего времени или предупредите людей. Для применения правок без обрыва соединений есть sudo systemctl reload apache2, но смену модуля LoadModule он может не подхватить.
Публикация второй и следующих баз
Строка LoadModule _1cws_module должна быть в конфигурации один раз. При публикации второй базы webinst добавит только новый Alias и <Directory>. Если вы правили конфигурацию вручную и строк LoadModule оказалось две, Apache не запустится — оставьте одну.
Удобнее держать каждую публикацию в отдельном файле, например /etc/apache2/conf-available/1c-buh.conf, а включать её через sudo a2enconf 1c-buh. Тогда при удалении базы не придётся вычищать общий конфиг.
Apache как обратный прокси
Если наружу смотрит отдельный шлюз, а модуль 1С стоит на внутреннем сервере, на шлюзе включают mod_proxy:
sudo a2enmod proxy proxy_http headers
ProxyPass "/buh/" "http://10.0.0.15/buh/"
ProxyPassReverse "/buh/" "http://10.0.0.15/buh/"
ProxyTimeout 600
Имя публикации на шлюзе и на внутреннем сервере держите одинаковым. При разных путях веб-клиент получает ссылки на ресурсы с неверным адресом и открывается частично.
Настройка сервера 1С:Предприятие для работы через веб
Для клиент-серверной базы веб-сервер — это клиент кластера. Он подключается к агенту сервера по порту 1540, затем к менеджеру кластера (1541) и к рабочим процессам из диапазона портов рабочего сервера (по умолчанию 1560–1591).
Что проверить на сервере 1С:
- Служба запущена. В новых релизах она оформлена юнитом systemd, имя содержит номер версии:
systemctl list-units | grep srv1cv8. - База создана в кластере, а её имя в кластере совпадает со значением
Refв строке соединения. Список баз выводитrac infobase summary list --cluster=<id>, идентификатор кластера даётrac cluster list(дляracдолжна быть запущена службаras). - Между веб-сервером и сервером 1С открыты порты 1540, 1541 и диапазон рабочих процессов.
- Версия модуля
wsap24.soи версия сервера 1С одинаковы.
Лицензии при работе через веб
Для клиент-серверной базы клиентские лицензии выдаёт сервер 1С, на веб-сервер их ставить не нужно. Для файловой базы лицензию получает сам модуль веб-сервера, поэтому клиентская лицензия должна быть доступна на компьютере, где работает Apache. Каждый сеанс веб-клиента или тонкого клиента через веб занимает лицензию так же, как обычный клиент.
Защита соединения: HTTPS для публикации 1С
Публиковать базу в интернет по голому HTTP нельзя: пароли пользователей 1С уходят открытым текстом. Минимум — сертификат и перенаправление с HTTP.
Для публичного домена проще всего бесплатный сертификат Let’s Encrypt:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d 1c.example.ru
Certbot сам создаст виртуальный хост на 443 и настроит продление. Для ручной настройки включите модуль sudo a2enmod ssl и пропишите в виртуальном хосте SSLEngine on, SSLCertificateFile и SSLCertificateKeyFile.
Что ещё закрыть:
- 🔒 перенаправьте все запросы с порта 80 на 443 (
Redirect permanent / https://1c.example.ru/); - 🔒 ограничьте доступ по IP, если пользователи работают из известных офисов:
Require ip 203.0.113.0/24вместоRequire all granted; - 🔒 закройте наружу порты 1540, 1541 и 1560–1591 — они нужны только внутри сети;
- 🔒 задайте пароли всем пользователям базы и уберите пользователей без пароля.
Тонкий клиент проверяет сертификат сервера. Самоподписанный сертификат он примет только после того, как корневой сертификат добавлен в доверенные на компьютере пользователя. Для внешних пользователей проще сразу взять сертификат от публичного центра.
Проверка публикации и разбор ошибок
Откройте в браузере https://сервер/buh. Должна появиться форма входа в 1С или сразу рабочий стол. Для тонкого клиента добавьте базу в список: «Добавить» → «Добавление в список существующей информационной базы» → тип расположения «На веб-сервере», адрес https://сервер/buh.
Если не открывается, начните с журнала: sudo tail -n 50 /var/log/apache2/error.log и sudo apachectl configtest.
Если не помогло
Запустите тест сразу на сервере, минуя сеть и прокси: curl -I http://localhost/buh/. Ответ 200 или перенаправление означает, что модуль и публикация работают, а проблема в прокси, файрволе или DNS. Ответ 500 при таком запросе — ищите причину в связке модуля с сервером 1С.
Ещё один приём — временно включить подробный журнал Apache: LogLevel debug в конфигурации. После диагностики верните прежний уровень, иначе журнал быстро разрастётся.
Производительность и обслуживание публикации
Модуль 1С сам по себе лёгкий: основную работу выполняет сервер 1С. Узкие места на стороне Apache обычно три — таймауты, сжатие и число потоков.
| Что настроить | Где | Зачем |
|---|---|---|
Timeout 600 | конфигурация Apache | длинные отчёты и закрытие месяца не обрываются через 60 секунд |
mod_deflate | sudo a2enmod deflate | меньше трафика при работе веб-клиента через медленный канал |
KeepAlive On | конфигурация Apache | браузер не открывает новое соединение на каждый запрос |
MaxRequestWorkers | настройки MPM | запас потоков при десятках одновременных пользователей |
Текущую модель MPM показывает apachectl -V | grep -i mpm. Значение MaxRequestWorkers поднимайте постепенно и следите за памятью: каждый поток занимает её, и на сервере с 4 ГБ легко уйти в своп.
Обновление платформы: главный подвох
При обновлении платформы новая версия ставится в новый каталог, например /opt/1cv8/x86_64/8.3.25.1286/. Строка LoadModule при этом продолжает указывать на старый wsap24.so. Пока старая версия не удалена, Apache работает, но модуль не совпадает по версии с обновлённым сервером 1С, и пользователи получают ошибку несовпадения версий.
После каждого обновления сервера 1С:
- Поправьте путь в
LoadModuleна новый каталог. - Выполните
sudo apachectl configtest. - Перезапустите Apache в нерабочее время.