Веб-сервер под 1С:Предприятие 8.3 своими руками: Apache, IIS, HTTPS и публикация баз
Содержание
Чтобы создать веб-сервер для 1С, нужны три вещи на одной машине: сам веб-сервер (Apache 2.4 или IIS), установленный компонент платформы «Модули расширения веб-сервера» той же разрядности и публикация базы через Конфигуратор или утилиту webinst. После публикации база открывается в браузере по адресу вида http://server/buh и в тонком клиенте по тому же URL.
Выбор связки простой. На Windows чаще ставят Apache 2.4: он легче настраивается и меньше капризничает с правами, чем IIS. IIS берут, когда он уже работает в компании и есть администратор, который его знает. На Linux единственный рабочий вариант для модуля 1С — Apache, а Nginx ставят перед ним как обратный прокси для HTTPS и раздачи статики.
Какую ОС и схему выбрать для веб-сервера 1С
Веб-сервер не хранит данных. Он принимает HTTP-запросы и передаёт их платформе: в файловую базу напрямую или в кластер серверов 1С через порт 1540. Поэтому его можно ставить и на ту же машину, где работает сервер 1С, и на отдельную.
| Схема | Когда подходит | Что учесть |
|---|---|---|
| Всё на одном сервере | До 20–30 пользователей, одна-две базы | Проще всего, но веб-сервер делит память с рабочими процессами |
| Отдельный веб-сервер в локальной сети | Публикация для удалённых сотрудников и мобильных приложений | Нужен доступ от веб-сервера к портам кластера: 1540, 1541 и диапазону рабочих процессов |
| Веб-сервер в DMZ + прокси | Доступ из интернета | Наружу смотрит только прокси на 443, сервер 1С остаётся во внутренней сети |
По операционной системе:
- 🪟 Windows Server 2016 и новее — привычно для большинства админов 1С, графическая публикация из Конфигуратора работает «из коробки».
- 🐧 Linux (Ubuntu, Debian, Astra, РЕД ОС) — дешевле по лицензиям ОС, стабильнее под нагрузкой, но публикуют только командой
webinstи правят конфиги руками.
Файловую базу через веб публиковать можно, но для доступа из интернета это слабое решение: при 5–10 одновременных пользователях начинаются блокировки. Для веб-доступа больше чем у пары человек переходите на клиент-серверный вариант.
Apache, IIS или Nginx: что поставить
Модуль 1С подключается к веб-серверу как расширение. Для каждого сервера свой файл модуля в каталоге bin платформы:
| Веб-сервер | Модуль 1С | ОС | Комментарий |
|---|---|---|---|
| Apache 2.4 | wsap24.dll / wsap24.so | Windows, Linux | Самый распространённый вариант |
| Apache 2.2 | wsap22.dll / wsap22.so | Windows, Linux | Устарел, для новых установок не берите |
| IIS 10 | wsisapi.dll | Windows | Работает через ISAPI |
| Nginx | модуля нет | Любая | Только прокси перед Apache или IIS |
Установка Apache 2.4 на Windows
- Скачайте сборку Apache 2.4 для Windows (например, с Apache Lounge) той же разрядности, что и платформа 1С. Сейчас это почти всегда x64.
- Распакуйте в
C:\Apache24. Если путь другой, поправьтеDefine SRVROOTвconf\httpd.conf. - Установите Visual C++ Redistributable, который требует сборка.
- Зарегистрируйте службу из командной строки администратора:
cd C:\Apache24\bin
httpd.exe -k install
httpd.exe -t
net start Apache2.4
Команда httpd.exe -t проверяет синтаксис конфига. Привыкайте запускать её после каждой правки.
Установка Apache на Linux
На Ubuntu и Debian хватает пакета из репозитория:
sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2
IIS
Роль ставят через Диспетчер серверов → Добавить роли и компоненты → Веб-сервер (IIS). Обязательно отметьте в службах ролей Разработка приложений → Расширения ISAPI и Фильтры ISAPI, иначе модуль 1С не загрузится.
Компоненты платформы 1С на веб-сервере
На машину с веб-сервером ставится та же версия платформы, что и на сервере 1С, вплоть до четвёртой цифры номера. Версия, номер которой отличается от версии кластера, не подключится к нему.
В установщике Windows отметьте компонент «Модули расширения веб-сервера». Сервер 1С ставить не нужно, если кластер работает на другой машине.
На Linux при установке из универсального дистрибутива включают компонент ws:
sudo ./setup-full-8.3.xx.xxxx-x86_64.run --mode unattended --enable-components server,ws
Если веб-сервер стоит отдельно от кластера, оставьте только ws. Точный список компонентов для вашей версии выводит сам установщик с ключом --help.
Разрядность модуля и веб-сервера должна совпадать. 32-битный Apache не загрузит 64-битный wsap24.dll, и наоборот. Это самая частая причина того, что служба Apache не стартует сразу после публикации.
Публикация базы 1С на веб-сервере
Публикация создаёт каталог с файлом default.vrd и добавляет в конфиг веб-сервера блок, который связывает URL с этим файлом.
Через Конфигуратор (Windows)
- Запустите Конфигуратор от имени администратора: без этого он не сможет записать
httpd.conf. - Откройте
Администрирование → Публикация на веб-сервере. - Укажите имя (оно станет частью адреса, латиницей:
buh), веб-сервер «Apache 2.4» и каталог публикации, напримерC:\inetpub\buh. - Отметьте, что публиковать: тонкий и веб-клиент, OData, веб-сервисы, HTTP-сервисы.
- Нажмите «Опубликовать» и согласитесь на перезапуск веб-сервера.
Командой webinst
Утилита webinst лежит в каталоге bin платформы. Она удобна для скриптов и для Linux, где графической публикации нет.
Windows, файловая база:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\webinst.exe" -publish -apache24 -wsdir buh -dir "C:\inetpub\buh" -connstr "File=""D:\Bases\Buh"";" -confpath "C:\Apache24\conf\httpd.conf"
Linux, клиент-серверная база :
sudo /opt/1cv8/x86_64/8.3.xx.xxxx/webinst -publish -apache24 \
-wsdir zup -dir /var/www/zup \
-connstr "Srvr=srv1c;Ref=zup;" \
-confpath /etc/apache2/apache2.conf
После этого в конце конфига Apache появится примерно такой блок:
LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.xx.xxxx/wsap24.so"
Alias "/zup" "/var/www/zup/"
<Directory "/var/www/zup/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/zup/default.vrd"
</Directory>
Директива LoadModule должна быть в конфиге одна, даже если баз десять. При публикации разных версий платформы старая строка остаётся, и Apache падает на дубле. Удалить публикацию можно той же утилитой с ключом -delete.
Права на каталоги
Пользователь, от которого работает веб-сервер, должен иметь:
- 📁 чтение каталога публикации с
default.vrd; - 📁 полный доступ к каталогу файловой базы (если база файловая);
- 📁 запись в каталог временных файлов.
На Windows Apache по умолчанию работает от Local System, а IIS — от учётки пула приложений. На Linux это www-data (Debian/Ubuntu) или apache (РЕД ОС, CentOS-подобные).
Пул сеансов, соединения и таймауты
Две настройки чаще всего влияют на скорость и стабильность публикации: сколько соединений обслуживает один рабочий процесс кластера и как долго живут простаивающие сеансы.
Количество соединений на процесс
Параметр задаётся в свойствах рабочего сервера в консоли кластера, рядом с «Количество ИБ на процесс». Когда лимит достигнут, кластер запускает новый рабочий процесс. Маленькое значение при большом числе веб-пользователей плодит процессы и расходует память; слишком большое собирает всех в одном процессе, и сбой одного запроса бьёт по всем.
Ориентир для старта — оставить значение по умолчанию и менять его, только если видите в консоли перекос: один процесс с сотнями соединений и высокой памятью.
Таймауты и пул для сервисов
Для веб-сервисов, HTTP-сервисов и OData повторное использование сеансов настраивают в 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="/zup"
ib="Srvr=srv1c;Ref=zup;">
<ws pointEnableCommon="true"/>
<standardOdata enable="true"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</point>
| Атрибут | Что значит | Ориентир |
|---|---|---|
reuseSessions | Повторно использовать сеансы | autouse или use |
sessionMaxAge | Сколько секунд простаивающий сеанс ждёт следующего запроса | 20–60 |
poolSize | Максимум сеансов в пуле | По числу параллельных обращений интеграции |
poolTimeout | Сколько секунд запрос ждёт свободный сеанс из пула | 5–10 |
После правки default.vrd перезапустите веб-сервер. Перезапуск обрывает сеансы веб-клиентов, поэтому делайте его вне рабочего времени или предупредите пользователей.
Для веб-клиента время бездействия до отключения удобнее задавать в самой базе, в настройках пользователей или в параметрах информационной базы в консоли кластера, а не на уровне веб-сервера.
HTTPS через Let’s Encrypt
Публиковать базу в интернет по голому HTTP нельзя: логины и пароли пользователей 1С уйдут открытым текстом. Бесплатный сертификат Let’s Encrypt решает задачу за 10 минут, если у сервера есть доменное имя и открыт порт 80 для проверки.
Linux + Apache
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d 1c.example.ru
sudo certbot renew --dry-run
Certbot сам добавит виртуальный хост на 443 и пропишет продление по таймеру. Блок публикации 1С с Alias и <Directory> работает и в HTTPS-хосте, потому что он стоит в общем конфиге.
Windows + Apache или IIS
Для Windows используют клиент win-acme: он выпускает сертификат, кладёт его в хранилище или в файлы и создаёт задачу планировщика на продление. Для IIS привязка к сайту делается автоматически, для Apache указывают пути к файлам в SSLCertificateFile и SSLCertificateKeyFile и подключают mod_ssl.
Вариант с Nginx впереди
Удобная схема: Nginx на 443 держит сертификат, а Apache с модулем 1С слушает только 127.0.0.1:8080.
server {
listen 443 ssl http2;
server_name 1c.example.ru;
ssl_certificate /etc/letsencrypt/live/1c.example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/1c.example.ru/privkey.pem;
client_max_body_size 200m;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 600s;
}
}
client_max_body_size нужен для загрузки файлов в базу, а увеличенный proxy_read_timeout — для долгих отчётов, иначе Nginx оборвёт их через 60 секунд с ошибкой 504.
Производительность и разбор ошибок публикации
Сам веб-сервер редко бывает узким местом. Тормозит обычно кластер или СУБД, а веб-сервер просто показывает это пользователю. Что всё-таки стоит настроить на его стороне:
- ⚙️ включите сжатие ответов (
mod_deflateв Apache,gzipв Nginx) — веб-клиент передаёт много JavaScript; - ⚙️ на Windows с Apache поднимите
ThreadsPerChildвconf\extra\httpd-mpm.conf, если пользователей больше 50; - ⚙️ держите веб-сервер и кластер в одной локальной сети: задержка между ними множится на каждый серверный вызов.
Логи для разбора: на Windows C:\Apache24\logs\error.log, на Linux /var/log/apache2/error.log, у IIS — журнал событий Windows и логи сайта.
Защита и резервные копии веб-сервера 1С
Опубликованная в интернет база — открытая дверь в бухгалтерию. Минимальный набор мер:
- 🔒 Только HTTPS. Порт 80 оставьте лишь для проверки Let’s Encrypt и редиректа на 443.
- 🔒 Пароли у всех пользователей 1С. Пользователь без пароля в опубликованной базе — прямой вход для любого, кто знает адрес.
- 🔒 Аутентификация ОС — только внутри сети. Для внешних публикаций её лучше отключить.
- 🔒 Не публикуйте лишнее. Если нужен только веб-клиент, не включайте OData и веб-сервисы: каждый открытый сервис — ещё одна точка входа.
- 🔒 Ограничьте круг адресов. Для офисов с постоянным IP —
Require ipв Apache илиallow/denyв Nginx; для удалённых сотрудников — VPN. - 🔒 Защита от подбора паролей. На Linux — fail2ban по логам веб-сервера, плюс ограничение частоты запросов в Nginx (
limit_req). - 🔒 Скрыть версию сервера. В Apache
ServerTokens ProdиServerSignature Off.
Кластер 1С никогда не публикуйте в интернет напрямую: порты 1540–1541 наружу открывать нельзя ни при каких схемах.
Что входит в резервную копию
Данных на веб-сервере нет, база копируется отдельно средствами СУБД или выгрузкой .dt. Но восстановление сервера с нуля без конфигов займёт полдня. Сохраняйте:
- 📦 каталоги публикаций с файлами
default.vrd; - 📦
httpd.conf(илиapache2.confиsites-available) и конфиги Nginx; - 📦 сертификаты и ключи (
/etc/letsencryptцеликом); - 📦 текстовую заметку: версия платформы, разрядность, список публикаций и строк подключения.
Для восстановления ставят ту же версию платформы, возвращают конфиги на место и перезапускают службу. Публиковать базы заново не требуется.
Частые вопросы
Нужна ли отдельная лицензия на веб-сервер 1С?
Можно ли опубликовать несколько баз на одном веб-сервере?
default.vrd и своё имя в адресе: /buh, /zup, /ut. Модуль 1С при этом подключается в конфиге один раз.Можно ли обойтись без Apache и IIS, только Nginx?
Что делать с публикацией после обновления платформы?
LoadModule на каталог новой версии и перезапустите веб-сервер. Публиковать базы заново не нужно, если строки подключения не менялись.Как подключиться к опубликованной базе из тонкого клиента?
https://1c.example.ru/buh.