Публикация 1С через Apache: веб-клиент и HTTP-сервисы

Публикация 1С через Apache: веб-клиент и HTTP-сервисы

Зачем публиковать 1С через веб-сервер

Если вы решите опубликовать информационную базу 1С через веб-сервер Apache, то знайте: перед вами тут же откроется сразу несколько сценариев работы.

  • Веб-клиент — работа с 1С через браузер без установки платформы на клиентское устройство
  • Тонкий клиент через интернет — подключение тонкого клиента к базе через HTTP/HTTPS
  • HTTP-сервисы — REST API для интеграции с внешними системами (сайт, CRM, мобильные приложения)
  • Web-сервисы (SOAP) — интеграция по протоколу SOAP

Веб-клиент, по моему опыту, очень выручает, когда речь идёт о компаниях с филиалами или удалёнными сотрудниками. Чтобы начать работу, человеку потребуется лишь свежий браузер — Chrome, Firefox или Edge. И главное, никакого дополнительного софта доустанавливать совсем не нужно!

Здесь разберём публикацию на связке Apache 2.4 + модуль веб-расширения 1С — и на Linux (Ubuntu 22.04), и на Windows Server 2019. Все примеры — под платформу 1С:Предприятие 8.3.24.

Установка компонентов на Linux (Ubuntu/Debian)

Чтобы веб-клиент 1С заработал на Linux, ставим три вещи: саму платформу 1С, Apache и модуль веб-расширения.

Ставим Apache:

sudo apt update
sudo apt install apache2 -y
sudo a2enmod ssl rewrite headers
sudo systemctl enable apache2

Устанавливаем серверные компоненты 1С из deb-пакетов:

# Скачайте пакеты с releases.1c.ru
sudo dpkg -i 1c-enterprise83-common_8.3.24.1548-1_amd64.deb
sudo dpkg -i 1c-enterprise83-ws_8.3.24.1548-1_amd64.deb
sudo apt install -f  # исправление зависимостей

Пакет 1c-enterprise83-ws устанавливает модуль Apache wsap24.so и утилиту публикации webinst. Проверяем наличие модуля:

ls -la /opt/1cv8/x86_64/8.3.24.1548/wsap24.so

Создаём симлинк для Apache:

cat > /etc/apache2/mods-available/1c.load <<EOF
LoadModule _1cws_module /opt/1cv8/x86_64/8.3.24.1548/wsap24.so
EOF

sudo a2enmod 1c
sudo systemctl restart apache2

Публикация базы через webinst

Утилита webinst создаёт конфигурацию Apache для доступа к информационной базе:

# Для файловой базы
/opt/1cv8/x86_64/8.3.24.1548/webinst -apache24 \
  -wsdir erp \
  -dir /var/www/1c/erp \
  -connstr "File=/opt/1c-bases/erp" \
  -confpath /etc/apache2/1c-publications.conf

# Для серверной базы
/opt/1cv8/x86_64/8.3.24.1548/webinst -apache24 \
  -wsdir erp \
  -dir /var/www/1c/erp \
  -connstr "Srvr=srv-1c;Ref=erp" \
  -confpath /etc/apache2/1c-publications.conf

Подключаем конфигурацию публикации в Apache:

echo "Include /etc/apache2/1c-publications.conf" >> /etc/apache2/apache2.conf
sudo systemctl restart apache2

Базы будет доступна по адресу http://server/erp.

Настройка публикации на Windows Server

На Windows Server базу публикуют либо из конфигуратора 1С, либо утилитой командной строки. Но сначала поставьте Apache 2.4 под Windows — например, сборку от Apache Lounge.

Публикуем из конфигуратора:

  1. Откройте базу в конфигураторе
  2. Меню Администрирование → Публикация на веб-сервере
  3. Укажите параметры:
    • Имя публикации: erp
    • Веб-сервер: Apache 2.4
    • Каталог: C:\inetpub\1c\erp
    • Поставьте галочки: «Публиковать веб-клиент», «Публиковать HTTP-сервисы»
  4. Нажмите «Опубликовать»

Конфигуратор создаст файл default.vrd в указанном каталоге и пропишет настройки в httpd.conf. Вот что внутри default.vrd:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  base="/erp"
  ib="Srvr=&quot;srv-1c&quot;;Ref=&quot;erp&quot;;"
  enable="true">
  <ws enable="true"/>
  <httpServices publishByDefault="true">
    <service name="API_Exchange" enable="true" rootUrl="api"/>
  </httpServices>
</point>

Файл default.vrd — ключевой файл публикации. Именно его можно редактировать вручную для тонкой настройки без конфигуратора.

Настройка HTTPS и аутентификации

Для боевой среды HTTPS обязателен. Голый HTTP допустим только в изолированных сетях — и нигде больше.

Берём сертификат Let's Encrypt и настраиваем Apache:

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d 1c.company.ru

Виртуальный хост Apache для 1С с HTTPS:

<VirtualHost *:443>
    ServerName 1c.company.ru
    DocumentRoot /var/www/1c

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/1c.company.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/1c.company.ru/privkey.pem

    # Публикация 1С
    Alias /erp /var/www/1c/erp
    <Directory /var/www/1c/erp>
        AllowOverride All
        Require all granted
    </Directory>

    # Ограничение по IP (опционально)
    <Location /erp>
        Require ip 10.0.0.0/8
        Require ip 192.168.0.0/16
        Require ip 203.0.113.50
    </Location>

    # Заголовки безопасности
    Header always set X-Frame-Options DENY
    Header always set X-Content-Type-Options nosniff
    Header always set Strict-Transport-Security "max-age=31536000"
</VirtualHost>

# Редирект HTTP → HTTPS
<VirtualHost *:80>
    ServerName 1c.company.ru
    Redirect permanent / https://1c.company.ru/
</VirtualHost>

Аутентификация OpenID и прокси

Для усиления безопасности можно настроить двухфакторную аутентификацию через reverse proxy. В default.vrd доступны параметры аутентификации:

<point ...
  allowedHosts="1c.company.ru"
  sessionMaxAge="3600"
  poolSize="10"
  poolTimeout="30">
  <openid url="https://auth.company.ru/openid"
    rely="https://1c.company.ru/erp" />
</point>

Параметры пула соединений в default.vrd критичны для производительности:

  • poolSize — максимальное количество сеансов в пуле (по умолчанию 10)
  • poolTimeout — таймаут ожидания свободного сеанса в секундах
  • sessionMaxAge — максимальное время жизни сеанса

Публикация HTTP-сервисов для интеграции

HTTP-сервисы 1С — это способ собрать REST API для обмена данными с внешними системами. Создали HTTP-сервис в конфигураторе — теперь его надо опубликовать.

Раздел HTTP-сервисов в файле default.vrd:

<httpServices publishByDefault="false">
  <service name="API_Exchange"
    enable="true"
    rootUrl="api"
    reuseSessions="autouse"
    sessionMaxAge="60" />
  <service name="API_Catalog"
    enable="true"
    rootUrl="catalog" />
</httpServices>

После публикации HTTP-сервис доступен по URL:

https://1c.company.ru/erp/hs/api/v1/orders

Пример обращения к HTTP-сервису через curl:

# Получение списка заказов
curl -X GET "https://1c.company.ru/erp/hs/api/v1/orders?date=2026-04-01" \
  -H "Authorization: Basic $(echo -n 'APIUser:P@ssw0rd' | base64)" \
  -H "Content-Type: application/json"

# Создание документа
curl -X POST "https://1c.company.ru/erp/hs/api/v1/orders" \
  -H "Authorization: Basic $(echo -n 'APIUser:P@ssw0rd' | base64)" \
  -H "Content-Type: application/json" \
  -d '{"client": "ООО Компания", "items": [{"sku": "00001", "qty": 10}]}'

Важно: для HTTP-сервисов рекомендуется создать отдельного пользователя 1С с минимальными правами и отключённым интерактивным входом.

Оптимизация производительности

Веб-клиент 1С прожорлив по ресурсам сервера. На каждого подключённого пользователя поднимается отдельный серверный процесс. Что крутим для оптимизации:

Настройка Apache MPM

Для 1С нужен MPM prefork — ни worker, ни event не подойдут, потому что модуль 1С не потокобезопасен:

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork

# /etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers       10
    MaxRequestWorkers     50
    MaxConnectionsPerChild 1000
</IfModule>

Значение MaxRequestWorkers определяет максимальное количество одновременных подключений. Каждый процесс потребляет 200-500 МБ RAM, поэтому для 50 пользователей нужно минимум 16 ГБ оперативной памяти.

Сжатие и кэширование

Включаем сжатие, чтобы сбить трафик:

sudo a2enmod deflate expires

# /etc/apache2/conf-available/1c-optimization.conf
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/javascript application/javascript
    AddOutputFilterByType DEFLATE application/json
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/png "access plus 7 days"
    ExpiresByType image/gif "access plus 7 days"
    ExpiresByType text/css "access plus 1 day"
    ExpiresByType application/javascript "access plus 1 day"
</IfModule>
sudo a2enconf 1c-optimization
sudo systemctl restart apache2

Решение типичных проблем

При публикации 1С через Apache часто возникают характерные ошибки. Рассмотрим наиболее распространённые:

Ошибка «Сервер 1С:Предприятия не обнаружен»:

  • Проверьте, загружен ли модуль: apache2ctl -M | grep 1cws
  • Убедитесь, что путь к wsap24.so корректен
  • Проверьте права доступа к каталогу публикации: chown -R www-data:www-data /var/www/1c/

Ошибка 403 Forbidden:

# Проверяем логи Apache
tail -f /var/log/apache2/error.log

# Часто причина — SELinux (на CentOS/RHEL)
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_unified 1

Веб-клиент открывается, но зависает при входе:

  • Проверьте доступность сервера 1С с машины Apache: telnet srv-1c 1541
  • Убедитесь, что кластер 1С запущен: sudo systemctl status srv1cv83
  • Проверьте файл default.vrd — строка подключения должна быть корректной

Медленная работа веб-клиента:

  • Включите сжатие (mod_deflate)
  • Убедитесь, что используется HTTPS/2: sudo a2enmod http2
  • Увеличьте poolSize в default.vrd
  • Проверьте, нет ли нехватки оперативной памяти: free -h

Часто задаваемые вопросы

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#1С веб-клиент#Apache 1С#публикация 1С#HTTP-сервисы 1С#1С через браузер#1С Apache настройка#веб-сервер 1С#1С Предприятие веб
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.