Как исправить ошибки Apache при переходе на 64-разрядную платформу 1С:Предприятие

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Перевод инфраструктуры «1С:Предприятие» на 64-разрядную платформу — это стандартный шаг для повышения производительности и стабильности работы системы. Однако этот процесс часто сопровождается трудностями при настройке веб-серверов. Администраторы сталкиваются с ситуацией, когда после удаления 32-разрядной платформы и установки x64 веб-сервер Apache отказывается запускаться, выдавая непонятные системные логи, а после переустановки начинает возвращать пользователям ошибку 404.

В этой статье мы подробно разберем, почему возникают подобные проблемы, проанализируем взаимосвязь разрядности веб-сервера и библиотек 1С, а также пошагово решим проблему с запуском веб-публикации и устраним ошибку HTTP: Not found /index.html.

Выясняем причину: почему Apache ругается на wsap22.dll или не запускается вовсе

Рассмотрим типичную ситуацию. Администратор переходит на 64-разрядную платформу 1С, удаляя старую 32-разрядную версию. При попытке перезапустить Apache служба веб-сервера «падает», а в логе ошибок (обычно это файл error.log в папке logs веб-сервера) фиксируется следующая запись:

Cannot load C:/Program Files (x86)/1cv8/8.3.12.1595/bin/wsap22.dll into server: \xcd\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc.

За нечитаемой кодировкой скрывается стандартное системное сообщение Windows: «Не найден указанный модуль». Давайте проанализируем, почему это происходит:

  1. Несоответствие разрядности (Bitness Mismatch). Это ключевая причина сбоя. 32-разрядный процесс веб-сервера Apache (x86) принципиально не способен загрузить 64-разрядную динамическую библиотеку (DLL) 1С, равно как и 64-разрядный Apache не сможет работать с 32-разрядной DLL. Если вы перешли на платформу 1С x64, вам в обязательном порядке потребуется 64-разрядная версия Apache.
  2. Устаревшие пути в файле конфигурации. Обратите внимание на путь в логе: C:/Program Files (x86)/.... Папка Program Files (x86) в операционных системах Windows зарезервирована строго под 32-битное программное обеспечение. 64-битная платформа 1С по умолчанию устанавливается в каталог C:/Program Files/.... Соответственно, веб-сервер пытается найти модуль по старому, несуществующему пути.
  3. Версия коннектора (wsap22.dll против wsap24.dll). Имя файла библиотеки имеет решающее значение. Модуль wsap22.dll предназначен для интеграции с Apache версий 2.2. Если вы используете современный веб-сервер Apache 2.4, вам необходима библиотека wsap24.dll. Использование несоответствующего модуля приведет к краху веб-сервера на этапе инициализации из-за различий в API версий Apache. Более того, начиная с версии платформы 1С 8.3.20, поддержка Apache 2.2 официально прекращена, и файл wsap22.dll больше не поставляется.

Шаг 1. Переход на 64-разрядный Apache 2.4

Поскольку 32-разрядный Apache не сможет работать с новой 64-битной платформой 1С, нам необходимо полностью заменить веб-сервер на его x64-версию. Разберем по шагам, как это сделать правильно.

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


httpd.exe -k stop
httpd.exe -k uninstall

После удаления старой версии перейдем к установке актуального ПО. Важно отметить, что официальный сайт проекта Apache предоставляет только исходный код. Бинарные сборки для Windows собираются сторонними доверенными сообществами. Ранее популярный ресурс ApacheHaus завершил свою работу, поэтому сегодня стандартом является проект Apache Lounge.

Выполните следующие действия:

  1. Перейдите на сайт проекта Apache Lounge и скачайте актуальный дистрибутив веб-сервера Apache 2.4 для архитектуры Windows x64 (например, сборку под кодовым именем VS16 или VS17).
  2. Обязательно скачайте и установите соответствующий пакет библиотек Microsoft Visual C++ Redistributable (например, VC++ 2015-2022). Если этого не сделать, Apache не сможет запустить модули 1С, возвращая ту же ошибку «Не найден указанный модуль», так как операционной системе не будет хватать зависимых библиотек C++ Runtime.
  3. Распакуйте содержимое архива Apache (папку Apache24) в корень системного диска, например, в C:\Apache24.

Шаг 2. Корректировка конфигурационного файла httpd.conf

Теперь нам необходимо настроить интеграцию нашего нового веб-сервера с новой 64-битной платформой 1С. Для этого мы отредактируем файл конфигурации Apache httpd.conf, который находится в папке C:\Apache24\conf.

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


# Подключение модуля расширения веб-сервера 1С:Предприятие 8.3
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.22.1709/bin/wsap24.dll"

Важные нюансы при редактировании путей в httpd.conf:

После сохранения изменений зарегистрируем и запустим службу нового Apache x64 в командной строке, запущенной от имени администратора:


C:\Apache24\bin\httpd.exe -k install
C:\Apache24\bin\httpd.exe -k start

Если служба запустилась успешно, веб-сервер готов к работе. Если возникли ошибки, перепроверьте наличие установленных библиотек MS Visual C++ Redistributable и корректность путей в файле httpd.conf.

Шаг 3. Публикация базы данных из Конфигуратора 1С

Часто администраторы сталкиваются с тем, что после перезапуска веб-сервера базы 1С все равно не работают. Это происходит из-за рассинхронизации утилит публикации. Рассмотрим типичный конфликт разрядностей при публикации баз.

Если вы запускаете 32-разрядный Конфигуратор 1С (тонкий или толстый клиент x86) и выполняете публикацию через меню Администрирование -> Публикация на веб-сервере, то платформа по умолчанию пропишет в конфигурационный файл Apache путь к 32-разрядному модулю из папки Program Files (x86). В результате 64-разрядный Apache мгновенно сломается при следующем перезапуске.

Чтобы избежать этой проблемы, придерживайтесь следующих правил:

Шаг 4. Устранение ошибки 404 (HTTP: Not found /index.html)

Представим, что мы успешно настроили и запустили 64-разрядный веб-сервер. Однако при попытке открыть базу через браузер по ссылке http://localhost/UT мы получаем JSON-ответ с ошибкой:


{"#exception":"{http://v8.1c.ru/8.2/virtual-resource-system}Exception","exception":{"clsid":"580392e6-ba49-4280-ac67-fcd6f2180121","reason":404,"descr":"HTTP: Not found\nОшибка при выполнении запроса GET к ресурсу /index.html:"}}

Давайте проанализируем эту ошибку. Самое важное понимание здесь состоит в том, что эту ошибку возвращает не Apache, а сама платформа 1С:Предприятие. Формат JSON с пространством имен v8.1c.ru однозначно доказывает, что веб-сервер успешно принял запрос, передал его модулю 1С (библиотеке wsap24.dll), но модуль 1С отклонил запрос с кодом 404. Почему это произошло?

Выясним причину. В конфигурационном файле Apache httpd.conf по умолчанию задана глобальная директива, определяющая индексный файл каталога:

DirectoryIndex index.html index.php

Когда мы обращаемся по адресу без косой черты на конце (http://localhost/UT), веб-сервер считает, что мы обращаемся к каталогу. Он ищет индексный файл и автоматически перенаправляет запрос на http://localhost/UT/index.html. Так как управление этой виртуальной директорией передано обработчику 1С (директива SetHandler 1c-application), запрос на файл index.html уходит внутрь платформы 1С. Платформа анализирует запрос, не находит внутри конфигурации веб-ресурса с именем index.html и выдает штатную ошибку 404.

Выполним шаги для исправления этой ситуации:

  1. Используйте правильный URL. Всегда обращайтесь к опубликованной базе 1С, указывая закрывающий слэш на конце адреса: http://localhost/UT/. В этом случае Apache поймет запрос корректно, и платформа 1С запустит стандартный веб-клиент.
  2. Очистите DirectoryIndex для публикации 1С. Мы можем принудительно запретить веб-серверу подставлять index.html внутри нашей публикации. Для этого найдем в файле httpd.conf блок конфигурации нашей базы (он создается автоматически при публикации) и добавим в него директиву DirectoryIndex disabled или просто обнулим ее. Выглядеть это будет следующим образом:

# Блок публикации базы 1С
Alias "/UT" "C:/inetpub/wwwroot/UT/"
<Directory "C:/inetpub/wwwroot/UT/">
    AllowOverride None
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/inetpub/wwwroot/UT/default.vrd"
    DirectoryIndex ""
</Directory>

После внесения этих изменений и перезапуска веб-сервера Apache обращение по адресу http://localhost/UT будет автоматически и корректно обрабатываться платформой 1С без вызова ошибки 404.

Шаг 5. Проверка прав доступа (актуально для файловых баз)

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

По умолчанию служба веб-сервера Apache в операционной системе Windows регистрируется и запускается от имени встроенной системной учетной записи SYSTEM (Локальная система) или локальной группы Network Service. Для того чтобы веб-клиент мог полноценно работать с файловой базой, процесс веб-сервера должен иметь возможность создавать, изменять и удалять файлы в каталоге базы данных (где находится файл 1Cv8.1CD), а также в каталоге публикации (где лежит конфигурационный файл default.vrd).

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

  1. Перейдите к каталогу, в котором физически расположена ваша файловая база данных 1С.
  2. Нажмите правой кнопкой мыши по папке, выберите Свойства, затем перейдите на вкладку Безопасность.
  3. Нажмите кнопку Изменить, а затем Добавить.
  4. Введите имя пользователя SYSTEM (или Network Service, в зависимости от того, от чьего имени запущена служба Apache) и нажмите «Проверить имена».
  5. В списке разрешений для этой учетной записи установите флажок напротив пункта Полный доступ (Full Control).
  6. Нажмите «Применить» и подтвердите наследование прав для всех дочерних файлов и папок (включая файлы блокировок 1Cv8.lcl и временные файлы).

Аналогичные права «Полный доступ» необходимо предоставить на каталог публикации (в нашем примере это C:/inetpub/wwwroot/UT/), чтобы служба Apache могла свободно читать и при необходимости изменять файл настроек публикации default.vrd.

Выполнив все описанные шаги, мы получим полностью работоспособную, быструю и стабильную 64-разрядную связку веб-сервера Apache 2.4 и платформы «1С:Предприятие 8.3».

← На главную