Как исправить ошибки веб-сервера Apache в 1С и защитить лицензии HASP от перехвата соседними организациями

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

При администрировании файловых баз данных 1С, опубликованных на веб-сервере Apache, технические специалисты часто сталкиваются с неочевидным поведением системы. В процессе обновления платформы или при совместном использовании сетевой инфраструктуры с другими компаниями могут возникать труднообъяснимые сбои. К ним относятся ложные сообщения о несоответствии версий клиента и сервера, внезапные ошибки инициализации базы данных, такие как сбой загрузки компоненты sqlite, а также «кража» свободных лицензий HASP компьютерами из соседних офисов.

В этой статье мы подробно разберем природу возникновения этих проблем и выработаем надежные пошаговые инструкции для их устранения. Мы пройдем путь от тонкостей настройки веб-публикации до конфигурирования сетевого обмена менеджера лицензий HASP.

Устраняем ошибку «Несоответствие версий клиента и сервера» при работе через веб-сервер

Рассмотрим классическую ситуацию: на выделенном сервере установлены файловые базы 1С и веб-сервер Apache. Пользователи запускают систему со своих локальных рабочих станций с помощью утилиты запуска 1cestart.exe, обращаясь к базе по HTTP-ссылке. При этом на самих рабочих станциях платформа 1С локально не установлена — исполняемые файлы считываются напрямую с сетевого ресурса сервера.

В какой-то момент пользователи начинают получать ошибку: «Несоответствие версий клиента и сервера (8.3.Х.ХХХХ - 8.3.Y.YYYY)». Примечательно, что версия, на которую ругается система как на «устаревшую серверную», якобы отсутствует на сервере, так как администратор уже выполнил установку новой платформы.

Выясним причину этого поведения. Когда запуск базы производится через 1cestart.exe по веб-ссылке, система инициализирует тонкий клиент 1С. Тонкий клиент обменивается данными с веб-сервером Apache, на котором опубликован ресурс базы. Для успешной работы версия запускаемого тонкого клиента на компьютере пользователя должна абсолютно точно (вплоть до последнего релиза) соответствовать версии модуля расширения веб-сервера 1С (файлу wsap24.dll), который загружен в адресное пространство процесса Apache.

Обычное обновление платформы на сервере методом последовательного нажатия кнопки «Далее» в инсталляторе копирует новые файлы в каталог программы, но не меняет настройки самого веб-сервера автоматически. Веб-сервер Apache продолжает использовать старый модуль расширения, на который указывает его конфигурационный файл. Из-за этого возникает аппаратный конфликт версий.

Выполним ручную перепубликацию базы данных и обновим конфигурацию Apache:

  1. Запустим конфигуратор 1С от имени администратора операционной системы на сервере, где установлен веб-сервер.
  2. Перейдем в меню Администрирование — Публикация на веб-сервере....
  3. В открывшемся окне выберем нашу публикацию, проверим корректность имени и веб-сервера (должен быть выбран установленный Apache), после чего нажмем кнопку Опубликовать. Программа обновит конфигурационные файлы публикации.
  4. Если автоматическая перепубликация не помогла или веб-сервер по-прежнему выдает ошибку несоответствия версий, отредактируем конфигурационный файл Apache вручную. Откроем файл httpd.conf (он обычно находится в подкаталоге conf в папке установки Apache) с помощью любого текстового редактора с правами администратора.
  5. Найдем директиву подключения модуля 1С. Она выглядит следующим образом:
    
    LoadModule _1cws_module "C:/Program Files/1cv8/8.3.15.1830/bin/wsap24.dll"
    
  6. Заменим старый номер релиза в пути к файлу wsap24.dll на актуальный, соответствующий свежеустановленной платформе:
    
    LoadModule _1cws_module "C:/Program Files/1cv8/8.3.22.1709/bin/wsap24.dll"
    
  7. Сохраним файл httpd.conf и перезапустим службу веб-сервера Apache через консоль управления службами Windows (services.msc) или командную строку:
    
    httpd -k restart
    

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

Решаем проблему «Ошибка загрузки компоненты sqlite» в файловых базах

Иногда после обновления платформы или изменения параметров публикации пользователи при попытке входа в базу данных через веб-сервер сталкиваются со следующей ошибкой: «Ошибка загрузки компоненты sqlite». У администраторов возникает логичный вопрос: при чем здесь СУБД SQLite, если базы данных развернуты в файловом режиме (традиционный формат 1Cv8.1CD)?

Проанализируем архитектуру платформы 1С. Начиная с версии 8.3.5, разработчики перевели подсистему Журнала регистрации на новый формат работы. Вместо старого текстового формата (файлы .lgf) по умолчанию используется база данных на движке SQLite (файлы с расширением .lgd). При работе пользователей с файловой базой через веб-сервер именно процесс Apache (от имени своей системной учетной записи) выполняет чтение и запись событий в журнал регистрации, используя встроенные библиотеки платформы 1С для работы с SQLite. Если этот процесс завершается ошибкой, запуск базы блокируется.

Существуют три основные причины этой проблемы, которые мы сейчас разберем:

  1. Несоответствие разрядности (битности) Apache и платформы 1С. Если на сервере установлен 64-разрядный веб-сервер Apache (x64), а модуль расширения веб-сервера 1С (компоненты в папке bin) был по ошибке установлен в 32-разрядной версии (x86), то Apache физически не сможет загрузить эту динамическую библиотеку. Веб-сервер упадет в ошибку при попытке инициализации любых связанных компонент, включая SQLite. Убедитесь, что разрядность установленного Apache и разрядность устанавливаемой платформы 1С строго совпадают.
  2. Недостаток прав доступа NTFS. Служба Apache по умолчанию функционирует под управлением ограниченной системной учетной записи (например, SYSTEM, LOCAL SERVICE или специального локального пользователя US_WS_USER). При установке обновления платформы права доступа к новым исполняемым файлам 1С в каталоге C:\Program Files\1cv8\ могут наследоваться некорректно. Также права могут отсутствовать на запись в подкаталог журнала регистрации базы данных — папку 1Cv8Log внутри каталога файловой базы.
  3. Проблемы с системной переменной окружения PATH. Если операционная система сервера не может быстро найти сопутствующие библиотеки 1С, необходимые для работы SQLite, веб-сервер вернет ошибку загрузки.

Для исправления этой ошибки выполним следующие действия:

  1. Проверим права доступа на каталог с установленной платформой 1С. Перейдем в свойства папки C:\Program Files\1cv8\, откроем вкладку Безопасность и убедимся, что учетная запись, под которой запущена служба веб-сервера Apache, имеет полные права на чтение и выполнение файлов в этом каталоге.
  2. Проверим права доступа на каталог файловой базы данных. Откроем свойства папки, в которой лежит файл 1Cv8.1CD. Учетная запись службы Apache должна иметь права Изменение и Запись на эту папку и все ее дочерние объекты, особенно на каталог 1Cv8Log и файл 1Cv8.lgd.
  3. Если проблема вызвана повреждением структуры самого файла журнала регистрации 1Cv8.lgd, временно переименуем этот файл в папке 1Cv8Log (например, в 1Cv8_old.lgd). При следующем запуске базы данных система автоматически создаст новый чистый файл журнала регистрации. Если база запустилась успешно, значит, старый файл журнала был поврежден или заблокирован другим процессом.

Разграничение лицензий HASP и защита от утечки ключей

Рассмотрим специфический сценарий, часто возникающий в офисных центрах. В одном здании находятся три независимые организации, у каждой из которых развернут собственный сервер 1С в локальной сети. Все серверы подключены к общему сетевому коммутатору и имеют доступ к одному внешнему IP-адресу, но используют разные порты для входящих подключений (например, порты 1111, 1112 и 1113). На серверах установлены локальные многопользовательские USB-ключи защиты HASP.

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

По умолчанию поиск сетевых лицензий HASP клиентами 1С происходит методом отправки широковещательных UDP-пакетов по порту 475 во всю доступную подсеть. Менеджер лицензий HASP License Manager, запущенный на любом сервере в этой подсети, перехватывает этот запрос и выделяет свободную лицензию первому обратившемуся компьютеру, независимо от того, к какой организации он принадлежит.

Мы можем решить эту проблему двумя независимыми способами: ограничить отдачу лицензий на стороне сервера или жестко прописать адреса серверов лицензирования на стороне клиентов.

Способ А. Ограничение выдачи лицензий на стороне сервера лицензирования

Мы можем указать менеджеру лицензий HASP, установленном на нашем сервере, список IP-адресов компьютеров, которым разрешено получать лицензии. Все запросы от чужих IP-адресов будут игнорироваться.

Для реализации этого метода отредактируем файл конфигурации HASP License Manager — nhsrv.ini. Разберем шаги:

  1. Найдем файл nhsrv.ini на сервере, где физически установлен USB-ключ защиты. Обычно этот файл находится в каталоге установки менеджера лицензий: C:\Program Files (x86)\Aladdin\Utility\ или в системных папках C:\Windows\System32\ (для 32-битных систем) / C:\Windows\SysWOW64\ (для 64-битных систем).
  2. Откроем этот файл с помощью текстового редактора с правами администратора.
  3. Перейдем к секции [NHS_SERVER]. Если этой секции нет, создадим ее.
  4. Добавим или раскомментируем параметр NHS_IP_LIMIT. Этот параметр позволяет перечислить конкретные IP-адреса, диапазоны или маски подсетей, которым разрешен доступ к ключу. Например, если ваши сотрудники работают в диапазоне адресов от 192.168.1.10 до 192.168.1.50, пропишем следующее правило:
    
    [NHS_SERVER]
    NHS_IP_LIMIT = 192.168.1.10-192.168.1.50
    
    Если необходимо разрешить доступ всей вашей локальной подсети 192.168.1.X и запретить остальным, укажем маску:
    
    [NHS_SERVER]
    NHS_IP_LIMIT = 192.168.1.*
    
  5. Сохраним файл nhsrv.ini.
  6. Перезапустим службу менеджера лицензий HASP через консоль управления службами Windows (служба обычно называется HASP Loader или Sentinel LDK License Manager), чтобы изменения вступили в силу.

Способ Б. Адресное указание сервера лицензий на компьютерах пользователей

Это более надежный и профессиональный метод организации лицензирования. Мы запретим платформе 1С на компьютерах наших пользователей отправлять широковещательные запросы в общую сеть и заставим ее обращаться напрямую к нашему серверу лицензирования по его статическому IP-адресу.

Для реализации этого способа мы настроим файл конфигурации клиента защиты — nethasp.ini:

  1. Найдем файл nethasp.ini на компьютере пользователя (или в шаблоне настроек на сервере терминалов RDP). Обычно он располагается в каталоге установки платформы в папке конфигурации: C:\Program Files\1cv8\conf\ или в папке конкретного релиза C:\Program Files\1cv8\8.3.Х.ХХХХ\bin\conf\.
  2. Откроем файл nethasp.ini в текстовом редакторе.
  3. Отредактируем параметры в секциях [NH_COMMON] и [NH_TCPIP], приведя их к следующему виду:
    
    [NH_COMMON]
    NH_TCPIP = Enabled  ; Включаем использование протокола TCP/IP
    
    [NH_TCPIP]
    NH_SERVER_ADDR = 192.168.1.15  ; Указываем статический IP-адрес ТОЛЬКО нашего сервера лицензий
    NH_PORT_NUMBER = 475           ; Стандартный порт HASP
    NH_TCPIP_METHOD = TCP          ; Используем надежный протокол TCP вместо UDP
    NH_USE_BROADCAST = Disabled     ; Полностью ОТКЛЮЧАЕМ широковещательный поиск в локальной сети
    
  4. Сохраним изменения в файле nethasp.ini. Если пользователи работают на терминальном сервере, достаточно настроить один общий файл nethasp.ini в каталоге conf общей папки установки платформы, чтобы правила применились ко всем сеансам.

Отключение широковещательного поиска (параметр NH_USE_BROADCAST = Disabled) гарантирует, что компьютеры ваших сотрудников больше никогда не будут пытаться занять лицензии с чужих серверов в здании, а жесткое указание адреса сервера (NH_SERVER_ADDR) обеспечит мгновенный запуск 1С без задержек на сканирование всей локальной сети.

Резюме совместной настройки

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

← На главную