После обновления платформы «1С:Предприятие 8.3» системные администраторы часто сталкиваются со странным поведением системы защиты: при наличии большого пула свободных лицензий (например, несколько ключей на 50 и 100 пользователей) пользователи внезапно начинают получать ошибку «Недостаточно свободных лицензий». Особенно остро эта проблема проявляется в базах, к которым настроен доступ через веб-интерфейс (веб-клиент через Apache или IIS), в то время как остальные пользователи работают через толстый или тонкий клиент.
В этой статье мы подробно разберем, почему возникает этот конфликт, как меняется логика работы платформы с лицензиями и какие конкретные шаги необходимо предпринять для стабилизации работы системы. Мы рассмотрим как аппаратные методы решения, так и тонкую настройку конфигурационных файлов nethasp.ini и nhsrv.ini.
Для начала проанализируем ситуацию. В нашем распоряжении имеются три сетевых ключа серии ORGL8 (два по 50 лицензий и один на 100). Они установлены на разных компьютерах в локальной сети. Часть баз (например, зарплатная база) раздает лицензии через сервер «1С:Предприятия» (опция Разрешить выдачу лицензий сервером включена), так как сотрудники заходят в личные кабинеты через браузер. Остальные базы запускаются обычным способом через толстый или тонкий клиент, забирая лицензии напрямую у менеджера лицензий HASP License Manager (HASP LM).
До обновления платформы (например, до версий линейки 8.3.17 и выше) система могла работать годами без видимых сбоев. Однако в новых релизах платформы разработчики «1С» существенно ужесточили механизмы контроля целостности системы защиты и проверки лицензий. Это привело к обострению трех фундаментальных проблем:
Timeout = 0 (вечно активное соединение). Как только веб-клиент обращается к серверу, сервер пытается запросить лицензию с того же ключа. При подсчете лицензий сервер видит сеансы с Timeout = 0 как занятые, путается в их реальном количестве и мгновенно блокирует выдачу новых лицензий, выдавая ошибку нехватки, даже если физически занято лишь несколько лицензий из 50.rphost, продолжая неоправданно удерживать дефицитные лицензии сервера.Разберем по шагам, как решить эту проблему раз и навсегда с помощью правильного распределения ключей и настройки конфигурации.
Самый простой и отказоустойчивый способ избавиться от конфликтов подсчета лицензий — физически разделить сферы влияния ключей, чтобы сервер «1С» и клиенты не претендовали на одно и то же устройство.
Организуем архитектуру следующим образом:
Таким образом, мы полностью исключаем конкуренцию за лицензии на одном ключе между сервером 1С и сетевыми клиентами.
Если физически переставить ключи невозможно или требуется жестко ограничить область поиска лицензий программным путем, мы можем прибегнуть к редактированию файлов конфигурации защиты.
Рассмотрим настройку файла nethasp.ini на стороне сервера «1С». По умолчанию платформа опрашивает сеть широковещательными пакетами и может случайно цеплять чужие ключи, вызывая коллизии. Нам нужно запретить серверу искать ключи в сети, оставив ему только локальный ключ.
Для этого откроем файл nethasp.ini, расположенный на сервере «1С» по пути C:\Program Files\1cv8\conf\nethasp.ini (или в папке настроек конкретной версии платформы), и приведем его к следующему виду, отключив сетевые протоколы поиска:
[NH_COMMON]
NH_TCPIP = Disabled
NH_IPX = Disabled
NH_NETBIOS = Disabled
После сохранения файла и перезапуска службы 1C:Enterprise 8.3 Server Agent наш сервер 1С перестанет сканировать локальную сеть в поисках сетевых HASP LM. Он будет видеть исключительно локально установленный в него ключ.
Теперь настроим клиентские машины (или терминальный сервер, где работают пользователи остальных 29 баз). Нам нужно сделать так, чтобы они искали только два сетевых ключа (50 и 100) и игнорировали машину сервера «1С». Для этого в их файлах nethasp.ini мы явно пропишем адреса менеджеров лицензий:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.10, 192.168.1.11
NH_USE_BROADCAST = Disabled
В параметре NH_SERVER_ADDR мы указываем IP-адреса только тех компьютеров, где установлены сетевые ключи на 50 и 100 пользователей с запущенными службами HASP LM. Адрес сервера «1С» сюда вносить не нужно. Отключение широковещательного поиска с помощью параметра NH_USE_BROADCAST = Disabled гарантирует, что клиенты не займут лицензии с «серверного» ключа случайным образом.
Если часть пользователей подключается к зарплатной базе не через браузер, а с помощью тонкого клиента 1С, они по умолчанию могут пытаться получить лицензию самостоятельно из сети через HASP LM. Чтобы заставить их получать лицензии строго от сервера 1С, проанализируем параметры запуска информационной базы.
В окне запуска «1С:Предприятия» выделим нужную базу, нажмем кнопку «Изменить», перейдем на последнюю вкладку параметров и в поле «Дополнительные параметры запуска» пропишем специальный ключ:
/UseHwLicenses-
Этот параметр принудительно запрещает локальному тонкому клиенту опрашивать локальные порты компьютера и искать сетевые ключи HASP по сети. Клиент будет запускаться только в том случае, если лицензию ему выделит сам сервер «1С:Предприятия».
Чтобы минимизировать проблему «зависания» лицензий из-за некорректно закрытых вкладок браузера веб-клиентами, нам необходимо настроить параметры очистки спящих сеансов в консоли администрирования кластера «1С».
Выполним следующие шаги:
Информационные базы.1200 секунд (20 минут). Если пользователь не проявляет активность в веб-кабинете 20 минут, его сеанс «засыпает», высвобождая лицензию в общий пул сервера.120 секунд (2 минуты). Спящий сеанс будет окончательно удален сервером, если активность не возобновится.Эти параметры позволят серверу оперативно реагировать на закрытые вкладки браузеров и возвращать лицензии обратно в пул, предотвращая их лавинообразное исчерпание.
Применяя предложенные методики физического разделения ключей и тонкой настройки конфигурационных файлов защиты, мы обеспечим бесперебойную работу как веб-клиентов зарплатной базы, так и локальных пользователей всех остальных конфигураций.