Многие администраторы при настройке веб-доступа к информационной базе 1С сталкиваются с классической проблемой: мы выполняем публикацию базы через конфигуратор, система радостно сообщает, что публикация выполнена успешно и предлагает перезапустить веб-сервер. Мы нажимаем «Да», но по значку Apache видим, что он остановлен. При попытке запустить службу вручную мы получаем ошибку "The requested operation has failed", а в логах (например, в файле error.log) видим сообщение вида: Cannot load .../wsap22.dll into server: %1 не является приложением Win32.
Давайте подробно разберем эту ситуацию, проанализируем причины ее возникновения и шаг за шагом восстановим работоспособность нашего веб-сервера.
Это самая частая причина, из-за которой веб-сервер отказывается стартовать. Золотое правило связки 1С и веб-сервера: разрядность программ должна совпадать. Если мы устанавливаем 64-битную платформу 1С, то и Apache должен быть 64-битным. Если 1С 32-битная, то и Apache требуется 32-битный.
Особенно часто проблема проявляется на 64-битных серверах, когда серверная часть 1С (и сам Apache) — 64-битные, а клиент 1С, с которого выполняется публикация из конфигуратора, — 32-битный. Конфигуратор при публикации автоматически прописывает путь к 32-битной библиотеке в файл настроек Apache (в папку Program Files (x86)). 64-битный Apache пытается загрузить 32-битную DLL-библиотеку и закономерно падает с ошибкой синтаксиса или формата.
Что мы делаем для решения:
C:/Apache24/conf/httpd.conf или аналогичному, в зависимости от версии.LoadModule _1cws_module."C:/Program Files (x86)/1cv8/8.3.xxx/bin/wsap24.dll".(x86)), чтобы он указывал на серверную 64-битную платформу.Правильная строка должна выглядеть примерно так:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.18.1363/bin/wsap24.dll"
Сохраним файл и перезапустим службу Apache. В большинстве случаев веб-сервер сразу успешно запустится.
Платформа 1С содержит модули для интеграции с разными версиями веб-серверов. Если мы используем ветку Apache 2.2, то конфигурационный файл должен ссылаться на wsap22.dll. Если мы перешли на более современный Apache 2.4, нам требуется библиотека wsap24.dll.
Иногда при публикации конфигуратор ошибается с определением версии (особенно при обновлении веб-сервера) и прописывает старую DLL. Откроем httpd.conf и проверим окончание строки с LoadModule. Если у нас установлен Apache 2.4, а в строке написано wsap22.dll, вручную изменим окончание на wsap24.dll и сохраним изменения.
Иногда строка в конфигурации правильная, и разрядность совпадает, но указанного файла библиотеки просто нет физически в папке bin платформы. Такое происходит, если при первичной установке или обновлении платформы 1С на сервере забыли отметить галочкой компонент «Модули расширения веб-сервера».
Для решения:
wsap24.dll (или wsap22.dll) в папке платформы.Каждая версия платформы 1С компилируется с использованием определенных библиотек Microsoft Visual C++. Например, новые платформы (начиная с 8.3.12 и выше) часто требуют наличия пакетов C++ Redistributable. Если эти пакеты не установлены в операционной системе сервера, библиотека 1С не сможет загрузиться в память веб-сервера, и Apache не стартует.
Проверим, установлены ли в системе пакеты vc_redist.x64.exe (для 64-битной платформы) или vc_redist.x86.exe (для 32-битной). Если их нет, скачаем актуальные версии с официального сайта Microsoft и установим.
Служба Apache обычно работает под системной учетной записью (Local System). Этому пользователю (а также пользователю IUSR или Network Service, если служба настроена иначе) требуются права на чтение и выполнение для каталогов платформы 1С.
Посмотрим на права доступа:
bin).1Cv8.1CD), иначе пользователи увидят белый экран или ошибку доступа к базе.default.vrd.Это не самая очевидная, но весьма коварная проблема. При автоматической публикации из 1С, конфигуратор дописывает настройки в конец файла httpd.conf. Иногда при этом меняется кодировка файла или добавляются невидимые BOM-маркеры (Byte Order Mark), которые Apache категорически не переваривает. В логах это отображается как синтаксическая ошибка на последней строке (Syntax error) или как набор непонятных символов \xcd\xe5....
Решение простое:
httpd.conf в продвинутом текстовом редакторе, таком как Notepad++.Если после публикации веб-сервер не стартует, стоит проверить, не занят ли 80-й порт. Возможно, на сервере одновременно работает IIS, Skype или другое приложение, перехватившее стандартный веб-порт. Посмотрим конфигурацию: найдем в файле httpd.conf строку Listen 80. Попробуем изменить порт на альтернативный, например:
Listen 82
Сохраним файл и проверим запуск. Не забудем, что при смене порта доступ к базе будет осуществляться с указанием порта: http://имя_сервера:82/имя_базы. Для развертывания и корректной настройки веб-сервера Apache на разных портах можно использовать скрипт установки Apache на Windows.
Иногда, чтобы избежать постоянного затирания конфигурации 1С-кой, проще опубликовать базу вручную. Рассмотрим пример ручной настройки для 64-битной связки 1С и Apache 2.4:
D:/www/1C) и скопируем туда файл default.vrd (его можно взять из любой другой удачной публикации и подправить в блокноте параметры подключения).httpd.conf и в самый конец аккуратно добавим блок настроек:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.13.1690/bin/wsap24.dll"
# 1c publication
Alias "/1C" "D:/www/1C"
<Directory "D:/www/1C">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "D:/www/1C/default.vrd"
</Directory>
При таком подходе мы полностью контролируем пути, загружаемые модули и параметры каталога. Главное — следить за соответствием версии платформы в пути LoadModule _1cws_module при последующих обновлениях 1С (старые папки удаляются, и путь нужно будет своевременно актуализировать в конфигурационном файле). Для более удобного управления веб-публикациями и предотвращения сбоев при настройке можно использовать специализированное приложение для управления публикациями баз 1С.