Веб-доступ к 1С через Apache на Linux: установка модуля, webinst, права и HTTPS

· 10 мин

Содержание

Чтобы опубликовать базу 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 / DebianRHEL / Rocky / Alma
Пакетapache2httpd
Файл конфигурации/etc/apache2/apache2.conf/etc/httpd/conf/httpd.conf
Пользователь Apachewww-dataapache
Журнал ошибок/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 работает от непривилегированного пользователя. Ему нужно читать каталог публикации, а для файловой базы — ещё и писать в каталог базы.

  1. Создайте каталог публикации, например /var/www/buh.
  2. Отдайте его пользователю Apache:
sudo mkdir -p /var/www/buh
sudo chown -R www-data:www-data /var/www/buh
  1. Для файловой базы выдайте права на её каталог (в нём лежит 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С:

  1. Служба запущена. В новых релизах она оформлена юнитом systemd, имя содержит номер версии: systemctl list-units | grep srv1cv8.
  2. База создана в кластере, а её имя в кластере совпадает со значением Ref в строке соединения. Список баз выводит rac infobase summary list --cluster=<id>, идентификатор кластера даёт rac cluster list (для rac должна быть запущена служба ras).
  3. Между веб-сервером и сервером 1С открыты порты 1540, 1541 и диапазон рабочих процессов.
  4. Версия модуля 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_deflatesudo 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С:

  1. Поправьте путь в LoadModule на новый каталог.
  2. Выполните sudo apachectl configtest.
  3. Перезапустите Apache в нерабочее время.
После обновления платформы
Выполнено: 0 / 5

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

Можно ли опубликовать на одном Apache несколько баз?
Да. Каждая база получает свой Alias, свой каталог и свой default.vrd, а строка LoadModule остаётся одна на всю конфигурацию.
Нужен ли Apache, если работать только тонким клиентом в локальной сети?
Нет. В локальной сети тонкий клиент подключается к серверу 1С напрямую. Веб-сервер нужен для веб-клиента, для подключения через интернет без VPN и для HTTP-сервисов и OData.
Подойдёт ли nginx вместо Apache?
Модуля расширения 1С для nginx нет. Nginx используют как обратный прокси перед Apache с модулем 1С, но сам обработчик запросов 1С работает только внутри Apache или IIS.
Как снять публикацию?
Запустите webinst с ключом -delete и тем же именем публикации, либо удалите блок Alias и Directory из конфигурации вручную и перезапустите Apache.
Как опубликовать HTTP-сервисы и OData?
HTTP-сервисы и веб-сервисы конфигурации публикуются в том же default.vrd. Их включают в окне публикации Конфигуратора, если он запущен на машине с Apache, или правкой default.vrd вручную, после чего перезапускают Apache.