При администрировании файловых баз данных 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:
httpd.conf (он обычно находится в подкаталоге conf в папке установки Apache) с помощью любого текстового редактора с правами администратора.
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.15.1830/bin/wsap24.dll"
wsap24.dll на актуальный, соответствующий свежеустановленной платформе:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.22.1709/bin/wsap24.dll"
httpd.conf и перезапустим службу веб-сервера Apache через консоль управления службами Windows (services.msc) или командную строку:
httpd -k restart
После перезапуска службы Apache веб-сервер начнет использовать правильную версию модуля расширения, и ошибка несоответствия версий исчезнет у всех пользователей.
Иногда после обновления платформы или изменения параметров публикации пользователи при попытке входа в базу данных через веб-сервер сталкиваются со следующей ошибкой: «Ошибка загрузки компоненты sqlite». У администраторов возникает логичный вопрос: при чем здесь СУБД SQLite, если базы данных развернуты в файловом режиме (традиционный формат 1Cv8.1CD)?
Проанализируем архитектуру платформы 1С. Начиная с версии 8.3.5, разработчики перевели подсистему Журнала регистрации на новый формат работы. Вместо старого текстового формата (файлы .lgf) по умолчанию используется база данных на движке SQLite (файлы с расширением .lgd). При работе пользователей с файловой базой через веб-сервер именно процесс Apache (от имени своей системной учетной записи) выполняет чтение и запись событий в журнал регистрации, используя встроенные библиотеки платформы 1С для работы с SQLite. Если этот процесс завершается ошибкой, запуск базы блокируется.
Существуют три основные причины этой проблемы, которые мы сейчас разберем:
bin) был по ошибке установлен в 32-разрядной версии (x86), то Apache физически не сможет загрузить эту динамическую библиотеку. Веб-сервер упадет в ошибку при попытке инициализации любых связанных компонент, включая SQLite. Убедитесь, что разрядность установленного Apache и разрядность устанавливаемой платформы 1С строго совпадают.SYSTEM, LOCAL SERVICE или специального локального пользователя US_WS_USER). При установке обновления платформы права доступа к новым исполняемым файлам 1С в каталоге C:\Program Files\1cv8\ могут наследоваться некорректно. Также права могут отсутствовать на запись в подкаталог журнала регистрации базы данных — папку 1Cv8Log внутри каталога файловой базы.Для исправления этой ошибки выполним следующие действия:
C:\Program Files\1cv8\, откроем вкладку Безопасность и убедимся, что учетная запись, под которой запущена служба веб-сервера Apache, имеет полные права на чтение и выполнение файлов в этом каталоге.1Cv8.1CD. Учетная запись службы Apache должна иметь права Изменение и Запись на эту папку и все ее дочерние объекты, особенно на каталог 1Cv8Log и файл 1Cv8.lgd.1Cv8.lgd, временно переименуем этот файл в папке 1Cv8Log (например, в 1Cv8_old.lgd). При следующем запуске базы данных система автоматически создаст новый чистый файл журнала регистрации. Если база запустилась успешно, значит, старый файл журнала был поврежден или заблокирован другим процессом.Рассмотрим специфический сценарий, часто возникающий в офисных центрах. В одном здании находятся три независимые организации, у каждой из которых развернут собственный сервер 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. Разберем шаги:
nhsrv.ini на сервере, где физически установлен USB-ключ защиты. Обычно этот файл находится в каталоге установки менеджера лицензий:
C:\Program Files (x86)\Aladdin\Utility\ или в системных папках C:\Windows\System32\ (для 32-битных систем) / C:\Windows\SysWOW64\ (для 64-битных систем).
[NHS_SERVER]. Если этой секции нет, создадим ее.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.*
nhsrv.ini.Это более надежный и профессиональный метод организации лицензирования. Мы запретим платформе 1С на компьютерах наших пользователей отправлять широковещательные запросы в общую сеть и заставим ее обращаться напрямую к нашему серверу лицензирования по его статическому IP-адресу.
Для реализации этого способа мы настроим файл конфигурации клиента защиты — nethasp.ini:
nethasp.ini на компьютере пользователя (или в шаблоне настроек на сервере терминалов RDP). Обычно он располагается в каталоге установки платформы в папке конфигурации:
C:\Program Files\1cv8\conf\ или в папке конкретного релиза C:\Program Files\1cv8\8.3.Х.ХХХХ\bin\conf\.
nethasp.ini в текстовом редакторе.[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 ; Полностью ОТКЛЮЧАЕМ широковещательный поиск в локальной сети
nethasp.ini. Если пользователи работают на терминальном сервере, достаточно настроить один общий файл nethasp.ini в каталоге conf общей папки установки платформы, чтобы правила применились ко всем сеансам.Отключение широковещательного поиска (параметр NH_USE_BROADCAST = Disabled) гарантирует, что компьютеры ваших сотрудников больше никогда не будут пытаться занять лицензии с чужих серверов в здании, а жесткое указание адреса сервера (NH_SERVER_ADDR) обеспечит мгновенный запуск 1С без задержек на сканирование всей локальной сети.
Мы детально изучили три критически важные проблемы администрирования связки 1С и Apache. Подведем краткие итоги нашей работы:
wsap24.dll в файле конфигурации веб-сервера httpd.conf.1Cv8Log.NHS_IP_LIMIT в файле конфигурации менеджера лицензий nhsrv.ini на сервере и точечно прописывайте IP-адреса серверов в файлах nethasp.ini на рабочих станциях клиентов.