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

· 10 мин

Содержание

Модуль расширения веб-сервера 1С отдельно не обновляется: он ставится вместе с новой версией платформы, а потом веб-сервер нужно переключить на него. Для Apache это строка LoadModule _1cws_module в httpd.conf, которая должна указывать на wsap24.dll (или wsap24.so в Linux) из папки новой версии. Для IIS — путь к wsisapi.dll в сопоставлении обработчиков. После правки веб-сервер перезапускают и проверяют версию в веб-клиенте.

Способов три: поправить путь вручную, заново опубликовать базу утилитой webinst или сделать это из Конфигуратора (Администрирование → Публикация на веб-сервере). Вручную — быстрее, если публикаций много и они уже настроены. webinst удобнее для скриптов. Конфигуратор — для одной базы, когда веб-сервер и платформа стоят на одной машине.

Зачем обновлять модуль веб-сервера вместе с платформой

Модуль веб-сервера — это не просто «переходник». Для клиент-серверной базы он сам выступает клиентом кластера 1С и подключается к нему, как толстый или тонкий клиент. Поэтому его версия должна совпадать с версией сервера 1С:Предприятия.

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

Ещё три причины обновлять модуль:

  • 🔧 исправления в самом модуле: утечки памяти, обработка больших запросов, работа с длинными сеансами;
  • 🌐 поддержка новых браузеров в веб-клиенте — она зашита в версию платформы;
  • 🗑 удаление старой версии платформы. Если httpd.conf ссылается на её папку, после удаления Apache просто не стартует.

Для файловой базы жёсткой привязки к версии сервера нет, но модуль всё равно работает с файлами базы своей версией платформы. Держите его в одной сборке с той, которой пользуются клиенты.

Подготовка и где взять модули нужной версии

Что проверить до начала

  1. Версию сервера 1С. Её видно в консоли кластера или в имени папки установки: C:\Program Files\1cv8\8.3.xx.xxxx\.
  2. Разрядность веб-сервера. 64-битный Apache или пул IIS загружает только 64-битный модуль, 32-битный — только 32-битный. Модуль берётся из установки платформы той же разрядности.
  3. Какой модуль подключён сейчас. Найдите в конфигурации веб-сервера все строки с wsap или wsisapi. Публикаций может быть несколько, и все они используют один модуль.
  4. Окно для работ. Перезапуск Apache или IIS обрывает все сеансы веб-клиента и запросы к HTTP-сервисам. Делайте это вне рабочего времени или предупредите пользователей и интеграторов.

Резервная копия конфигурации веб-сервера

База данных при этой операции не меняется, копировать её не нужно. Копируют настройки веб-сервера:

  • Apache в Windows: C:\Apache24\conf\httpd.conf (или путь вашей сборки) и подключаемые файлы conf\extra\;
  • Apache в Linux: /etc/apache2/ целиком (Debian, Ubuntu, Astra) или /etc/httpd/ (РЕД ОС, CentOS-подобные);
  • IIS: файл default.vrd в каталоге каждой публикации и экспорт конфигурации через appcmd.

Файл default.vrd лежит в папке публикации и хранит строку соединения с базой, настройки веб-сервисов и OData. При переопубликации webinst и Конфигуратор его перезаписывают, поэтому ручные правки в нём пропадут, если не сохранить копию.

Откуда берётся модуль

Отдельного дистрибутива «модули расширения веб-сервера» нет. Они входят в установку технологической платформы:

СистемаЧто установитьГде окажется модуль
WindowsПолный дистрибутив платформы, компонент «Модули расширения веб-сервера»C:\Program Files\1cv8\<версия>\bin\
Linux, сборки 8.3.20 и новееЕдиный установщик платформы с компонентом модулей веб-сервера/opt/1cv8/x86_64/<версия>/
Linux, старые сборкиПакет с суффиксом -ws той же версии, что и сервер/opt/1cv8/x86_64/<версия>/ или /opt/1C/v8.3/x86_64/

Дистрибутив скачивают на портале обновлений 1С по договору ИТС. Если при установке в Windows компонент модулей не отметили, его можно добавить позже: Параметры → Приложения, найти нужную версию 1С:Предприятия, выбрать «Изменить» и отметить компонент.

Модуль 64-битного Apache есть только в 64-битной платформе. Если на сервере стоит лишь 32-битный клиент, нужного файла в папке bin просто не будет.

Как обновить модуль 1С для Apache в Windows

Версия Apache 2.4 использует wsap24.dll. Для 2.2 был wsap22.dll, для 2.0 — wsapch2.dll, но эти версии Apache давно не поддерживаются, новые установки делают на 2.4.

Вариант 1. Правка пути в httpd.conf

  1. Остановите службу Apache: services.msc → служба Apache (обычно Apache2.4) → «Остановить». Или из командной строки администратора:
net stop Apache2.4
  1. Откройте httpd.conf в редакторе и найдите строку:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.23.1865/bin/wsap24.dll"
  1. Замените номер версии на новый. Слеши в пути оставьте прямыми, путь — в кавычках, потому что в нём есть пробел.
  2. Проверьте синтаксис, не запуская службу:
C:\Apache24\bin\httpd.exe -t

Ответ Syntax OK значит, что Apache нашёл модуль и смог его загрузить.

  1. Запустите службу: net start Apache2.4.

Строки <Location /base> и ManagedApplicationDescriptor для каждой публикации трогать не нужно: в них указан путь к default.vrd, а не к платформе.

Вариант 2. Переопубликация через webinst

Утилита webinst.exe лежит в той же папке bin новой версии. Она сама пропишет нужный путь к модулю:

"C:\Program Files\1cv8\8.3.24.1342\bin\webinst.exe" -publish -apache24 -wsdir base -dir "C:\inetpub\wwwroot\base" -connstr "Srvr=srv1c;Ref=base;" -confpath "C:\Apache24\conf\httpd.conf"
  • -wsdir — имя публикации в адресе (http://сервер/base);
  • -dir — каталог публикации, где лежит default.vrd;
  • -connstr — строка соединения с базой;
  • -confpath — путь к httpd.conf.

Запускайте от имени администратора. Остальные ключи смотрите в справке самой утилиты (webinst.exe без параметров выводит их список).

Вариант 3. Из Конфигуратора

Откройте базу в Конфигураторе новой версии платформы, затем Администрирование → Публикация на веб-сервере. Выберите Apache 2.4, проверьте имя и каталог и нажмите «Опубликовать». Конфигуратор нужно запускать от имени администратора Windows, иначе он не сможет записать httpd.conf.

Обновление модулей расширения веб-сервера в Linux

В Linux алгоритм тот же, меняются только команды. Пример для Ubuntu и Astra Linux, где служба называется apache2. В РЕД ОС и других RPM-системах служба называется httpd, а конфигурация лежит в /etc/httpd/.

Шаг 1. Установить новую версию платформы с модулями

Распакуйте дистрибутив во временный каталог, например /tmp/1c, и установите компоненты сервера и модулей веб-сервера той же версии, что и кластер. После установки проверьте, что файл появился:

ls -l /opt/1cv8/x86_64/8.3.24.1342/wsap24.so

Шаг 2. Остановить Apache

sudo systemctl stop apache2

Шаг 3. Поменять путь к модулю

Строка с модулем обычно лежит в /etc/apache2/apache2.conf или в отдельном файле в /etc/apache2/conf-available/. Найдите её:

grep -rn "_1cws_module" /etc/apache2/

Поправьте версию в пути вручную или командой sed (сначала сделайте копию файла):

sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
sudo sed -i 's#/opt/1cv8/x86_64/8.3.23.1865/#/opt/1cv8/x86_64/8.3.24.1342/#' /etc/apache2/apache2.conf

Тот же результат даёт webinst из каталога новой версии с ключами -publish -apache24 и путём к конфигурации в -confpath.

Шаг 4. Проверить конфигурацию и запустить

sudo apachectl configtest
sudo systemctl start apache2
sudo systemctl status apache2

В выводе status должно быть active (running). Если служба упала, причина почти всегда в первых строках journalctl -u apache2 -n 50 или в /var/log/apache2/error.log.

У пользователя, от имени которого работает Apache (www-data в Debian и Ubuntu), должно быть право на чтение каталога публикации и файла default.vrd. После переопубликации от root это право иногда теряется.

Обновление модуля веб-сервера для IIS

IIS работает с модулем wsisapi.dll через механизм ISAPI. Самый надёжный путь — переопубликовать базу новой версией webinst или Конфигуратора с выбором IIS:

"C:\Program Files\1cv8\8.3.24.1342\bin\webinst.exe" -publish -iis -wsdir base -dir "C:\inetpub\wwwroot\base" -connstr "Srvr=srv1c;Ref=base;"

Если меняете путь вручную, нужны два места, и про второе часто забывают:

  1. Сопоставления обработчиков. В диспетчере IIS откройте приложение публикации → «Сопоставления обработчиков» → обработчик 1С (модуль IsapiModule) и укажите путь к wsisapi.dll из папки новой версии.
  2. Ограничения ISAPI и CGI. На уровне сервера откройте этот раздел и добавьте новый wsisapi.dll с разрешением на выполнение. Без этого IIS вернёт ошибку 404.2.

После правки перезапустите IIS из командной строки администратора:

iisreset

Команда iisreset перезапускает все сайты на сервере, а не только публикацию 1С. Если на том же IIS работают другие приложения, вместо неё перезапустите только пул приложений публикации.

Для 32-битного модуля в настройках пула включают «Разрешить 32-разрядные приложения». Для 64-битного модуля этот флаг должен быть выключен.

Проверка публикации после обновления

Убедиться, что Apache или IIS запустился, мало. Пройдите по списку:

Проверка после обновления модуля
Выполнено: 0 / 8

Окно «О программе» в веб-клиенте открывается через меню с иконкой шестерёнки или «гамбургера» в заголовке окна. Там видны и версия платформы, и версия конфигурации.

Если после обновления у части пользователей веб-клиент ведёт себя странно (не открываются формы, ломается отрисовка), попросите их обновить страницу с очисткой кэша (Ctrl+F5). Браузер мог закешировать скрипты старой версии.

Автоматизация обновлений для нескольких серверов

Когда публикаций десятки, а платформу обновляют каждый квартал, ручная правка надоедает. Задача сводится к замене одного номера версии в конфигурации веб-сервера.

Пример для PowerShell (Windows, Apache 2.4). Скрипт меняет путь к модулю на указанную версию, проверяет конфигурацию и при ошибке возвращает старый файл:

$new  = "8.3.24.1342"
$conf = "C:\Apache24\conf\httpd.conf"
$dll  = "C:/Program Files/1cv8/$new/bin/wsap24.dll"

if (-not (Test-Path $dll)) { throw "Модуль $dll не найден" }

Copy-Item $conf "$conf.bak" -Force
Stop-Service Apache2.4

$text = [IO.File]::ReadAllText($conf)
$text = $text -replace 'LoadModule _1cws_module ".*?"', "LoadModule _1cws_module `"$dll`""
[IO.File]::WriteAllText($conf, $text, (New-Object Text.UTF8Encoding $false))

& "C:\Apache24\bin\httpd.exe" -t
if ($LASTEXITCODE -ne 0) {
    Copy-Item "$conf.bak" $conf -Force
    Write-Host "Ошибка конфигурации, возвращён старый файл"
}
Start-Service Apache2.4

Скрипт записывает файл в UTF-8 без метки BOM. Метка в начале httpd.conf мешает Apache прочитать первую директиву, поэтому штатный Set-Content -Encoding UTF8 из Windows PowerShell 5 здесь не подходит.

В Linux удобнее другой приём: создать символическую ссылку на текущую версию и указать её в LoadModule:

sudo ln -sfn /opt/1cv8/x86_64/8.3.24.1342 /opt/1cv8/x86_64/current
# в конфигурации Apache:
# LoadModule _1cws_module "/opt/1cv8/x86_64/current/wsap24.so"
sudo apachectl configtest && sudo systemctl restart apache2

Тогда при следующем обновлении меняется только ссылка, а конфигурация Apache остаётся прежней. Такую же ссылку можно использовать в Ansible или другом средстве управления конфигурацией.

Ошибки при обновлении модуля и что с ними делать

Диагностика: выберите симптом

Если ошибка не из списка, начните с журнала: C:\Apache24\logs\error.log в Windows, /var/log/apache2/error.log или /var/log/httpd/error_log в Linux. Для IIS включите трассировку неудачных запросов в диспетчере IIS: она покажет, на каком модуле обрывается обработка.

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

Есть ли модуль расширения 1С для Nginx?
Нет. Платформа поставляет модули только для Apache и IIS. Nginx используют как обратный прокси перед Apache с модулем 1С, поэтому при обновлении меняют модуль в Apache, а настройки Nginx не трогают.
Можно ли держать на одном Apache публикации разных версий платформы?
Нет, один процесс Apache загружает один модуль 1С. Для баз на разных версиях сервера поднимают отдельные экземпляры Apache на разных портах или на разных машинах.
Нужно ли переопубликовывать каждую базу после обновления?
Для Apache нет: достаточно поменять путь в строке LoadModule, публикации подхватят новый модуль. Переопубликация нужна, если вы меняете параметры публикации или используете IIS и не хотите править обработчики вручную.
Сохранятся ли настройки OData и HTTP-сервисов после обновления модуля?
Да, если вы только поменяли путь к модулю: настройки лежат в default.vrd. При переопубликации файл перезаписывается, поэтому ручные правки в нём нужно сохранить заранее.
Когда можно удалять старую версию платформы?
После того как веб-сервер, сервер 1С и все клиенты перешли на новую версию и прошли проверку. Удаление раньше остановит Apache, если в его конфигурации остался старый путь.