Почему Apache не стартует после публикации базы 1С и как это исправить?

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

Многие администраторы при настройке веб-доступа к информационной базе 1С сталкиваются с классической проблемой: мы выполняем публикацию базы через конфигуратор, система радостно сообщает, что публикация выполнена успешно и предлагает перезапустить веб-сервер. Мы нажимаем «Да», но по значку Apache видим, что он остановлен. При попытке запустить службу вручную мы получаем ошибку "The requested operation has failed", а в логах (например, в файле error.log) видим сообщение вида: Cannot load .../wsap22.dll into server: %1 не является приложением Win32.

Давайте подробно разберем эту ситуацию, проанализируем причины ее возникновения и шаг за шагом восстановим работоспособность нашего веб-сервера.

Причина 1. Несовпадение разрядности платформы 1С и веб-сервера Apache

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

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

Что мы делаем для решения:

  1. Откроем конфигурационный файл веб-сервера. Обычно он находится по пути C:/Apache24/conf/httpd.conf или аналогичному, в зависимости от версии.
  2. Найдем строку, начинающуюся с LoadModule _1cws_module.
  3. Проверим путь, который туда записала 1С. Скорее всего, он выглядит так: "C:/Program Files (x86)/1cv8/8.3.xxx/bin/wsap24.dll".
  4. Исправим путь на 64-битный каталог (удалим (x86)), чтобы он указывал на серверную 64-битную платформу.

Правильная строка должна выглядеть примерно так:

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.18.1363/bin/wsap24.dll"

Сохраним файл и перезапустим службу Apache. В большинстве случаев веб-сервер сразу успешно запустится.

Причина 2. Ошибка в подключаемой библиотеке (wsap22.dll vs wsap24.dll)

Платформа 1С содержит модули для интеграции с разными версиями веб-серверов. Если мы используем ветку Apache 2.2, то конфигурационный файл должен ссылаться на wsap22.dll. Если мы перешли на более современный Apache 2.4, нам требуется библиотека wsap24.dll.

Иногда при публикации конфигуратор ошибается с определением версии (особенно при обновлении веб-сервера) и прописывает старую DLL. Откроем httpd.conf и проверим окончание строки с LoadModule. Если у нас установлен Apache 2.4, а в строке написано wsap22.dll, вручную изменим окончание на wsap24.dll и сохраним изменения.

Причина 3. Не установлены «Модули расширения веб-сервера» 1С

Иногда строка в конфигурации правильная, и разрядность совпадает, но указанного файла библиотеки просто нет физически в папке bin платформы. Такое происходит, если при первичной установке или обновлении платформы 1С на сервере забыли отметить галочкой компонент «Модули расширения веб-сервера».

Для решения:

  1. Запустим установщик (инсталлятор) нашей версии платформы 1С.
  2. Выберем режим «Изменить» (Modify).
  3. В дереве компонентов найдем «Модули расширения веб-сервера» и выберем «Данный компонент будет установлен на жесткий диск».
  4. Завершим установку и проверим наличие файла wsap24.dll (или wsap22.dll) в папке платформы.

Причина 4. Отсутствие необходимых библиотек Visual C++

Каждая версия платформы 1С компилируется с использованием определенных библиотек Microsoft Visual C++. Например, новые платформы (начиная с 8.3.12 и выше) часто требуют наличия пакетов C++ Redistributable. Если эти пакеты не установлены в операционной системе сервера, библиотека 1С не сможет загрузиться в память веб-сервера, и Apache не стартует.

Проверим, установлены ли в системе пакеты vc_redist.x64.exe (для 64-битной платформы) или vc_redist.x86.exe (для 32-битной). Если их нет, скачаем актуальные версии с официального сайта Microsoft и установим.

Причина 5. Нехватка прав доступа пользователя службы

Служба Apache обычно работает под системной учетной записью (Local System). Этому пользователю (а также пользователю IUSR или Network Service, если служба настроена иначе) требуются права на чтение и выполнение для каталогов платформы 1С.

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

  1. Откроем свойства папки с установленной платформой 1С (каталог bin).
  2. Перейдем на вкладку «Безопасность».
  3. Убедимся, что у пользователя, под которым запускается Apache, есть права на «Чтение и выполнение».
  4. Если база файловая, этому же пользователю необходимо дать полные права на каталог с самой информационной базой (там, где лежит файл 1Cv8.1CD), иначе пользователи увидят белый экран или ошибку доступа к базе.
  5. Также проверим права на каталог, куда опубликован файл default.vrd.

Причина 6. Повреждение кодировки конфигурационного файла

Это не самая очевидная, но весьма коварная проблема. При автоматической публикации из 1С, конфигуратор дописывает настройки в конец файла httpd.conf. Иногда при этом меняется кодировка файла или добавляются невидимые BOM-маркеры (Byte Order Mark), которые Apache категорически не переваривает. В логах это отображается как синтаксическая ошибка на последней строке (Syntax error) или как набор непонятных символов \xcd\xe5....

Решение простое:

  1. Откроем файл httpd.conf в продвинутом текстовом редакторе, таком как Notepad++.
  2. В меню «Кодировки» выберем «Преобразовать в UTF-8 без BOM» (или в ANSI, в зависимости от изначального формата файла).
  3. Сохраним файл и запустим веб-сервер.

Причина 7. Конфликт портов

Если после публикации веб-сервер не стартует, стоит проверить, не занят ли 80-й порт. Возможно, на сервере одновременно работает IIS, Skype или другое приложение, перехватившее стандартный веб-порт. Посмотрим конфигурацию: найдем в файле httpd.conf строку Listen 80. Попробуем изменить порт на альтернативный, например:

Listen 82

Сохраним файл и проверим запуск. Не забудем, что при смене порта доступ к базе будет осуществляться с указанием порта: http://имя_сервера:82/имя_базы. Для развертывания и корректной настройки веб-сервера Apache на разных портах можно использовать скрипт установки Apache на Windows.

Альтернативное решение: Ручная публикация без конфигуратора

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

  1. Создадим папку для публикации (например, D:/www/1C) и скопируем туда файл default.vrd (его можно взять из любой другой удачной публикации и подправить в блокноте параметры подключения).
  2. Откроем 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С.

← На главную