При организации доступа к файловым базам 1С через веб-сервер (IIS или Apache) многие администраторы сталкиваются с проблемой неэффективного расхода лицензий. Веб-сервер по умолчанию выделяет одну лицензию на каждый открытый сеанс, будь то новая вкладка в браузере или отдельный запуск приложения. Это приводит к быстрому исчерпанию пула лицензий, для предотвращения чего можно использовать удаление спящих сеансов, даже если с базой работает всего несколько человек. Разберемся, как исправить эту ситуацию и заставить систему выдавать одну лицензию на компьютер пользователя, независимо от количества запущенных им сеансов.
Чтобы понять суть проблемы, проанализируем механизм получения лицензии в разных сценариях. Ключевое различие заключается в том, кто инициирует поиск лицензии.
Сценарий 1: Работа через веб-клиент (браузер)
Когда пользователь открывает базу в браузере, его компьютер напрямую с сервером 1С не общается, поэтому требуется управление сеансами 1С сервера. Вся работа идет через модуль расширения веб-сервера. Именно этот модуль на стороне сервера берет на себя задачу найти и выделить лицензию для обслуживания текущего подключения. Для него каждое новое подключение (например, новая вкладка) — это новый сеанс, требующий отдельной лицензии. В этой схеме настроить выдачу лицензий "на компьютер" невозможно, такова архитектура платформы.
Сценарий 2: Работа через тонкий клиент
Тонкий клиент — это полноценное приложение, установленное на компьютере пользователя. В отличие от браузера, он обладает логикой самостоятельного поиска лицензии. Перед тем как установить соединение с сервером, тонкий клиент выполняет следующие действия:
Именно эта особенность тонкого клиента позволяет нам построить схемы для экономного расходования лицензий. Если тонкий клиент сможет найти лицензию до обращения к веб-серверу, то веб-сервер не будет тратить свои.
Это самый простой и надежный способ решения проблемы. Он идеально подходит, если у вас есть или вы готовы приобрести однопользовательские программные лицензии. Суть метода в том, чтобы "отвязать" пользователя от серверного пула лицензий, выдав ему персональную.
Рассмотрим по шагам:
Теперь при запуске 1С тонкий клиент в первую очередь обнаружит активную локальную лицензию и будет использовать ее. Эта одна лицензия позволит пользователю запускать любое количество сеансов и открывать несколько баз одновременно. Серверные лицензии при этом расходоваться не будут.
Важный нюанс: нужно предусмотреть ситуацию, когда локальная лицензия может "слететь" (например, после смены комплектующих ПК). В этом случае тонкий клиент по умолчанию начнет искать лицензию в сети и может занять одну из серверных. Чтобы этого не произошло, можно принудительно запретить клиенту искать лицензии где-либо, кроме локальной машины, с помощью файла конфигурации nethasp.ini. Но чаще всего достаточно простого контроля со стороны администратора.
Этот способ более сложный в настройке, но позволяет централизованно управлять многопользовательским ключом. Он подходит, если у вас есть аппаратный (USB) или программный многопользовательский ключ, и вы хотите, чтобы пользователи получали лицензии с него, а не от веб-сервера.
Схема работы следующая: тонкий клиент пользователя должен "увидеть" сервер с менеджером лицензий (HASP License Manager) в сети и получить лицензию напрямую. Веб-сервер при этом должен быть настроен так, чтобы он сам лицензии не искал и не раздавал.
Разберем по шагам:
Обеспечьте сетевую доступность. Компьютер пользователя должен иметь доступ к серверу, где установлен менеджер лицензий HASP LM и активирован ключ. Стандартно для этого используется UDP-порт 475. Если пользователи работают удаленно, необходимо настроить VPN-соединение, которое пропустит трафик по этому порту.
Настройте клиентские машины. Чтобы ускорить поиск лицензии и сделать его более надежным, на компьютерах пользователей рекомендуется создать файл nethasp.ini. В нем можно явно прописать IP-адрес сервера с менеджером лицензий. Это избавляет от необходимости использовать широковещательные (broadcast) запросы, которые могут плохо работать в сложных сетях или через VPN.
Изолируйте веб-сервер от поиска лицензий. Это критически важный шаг. Если этого не сделать, веб-сервер при запуске сам найдет ключ в сети, "захватит" все лицензии и начнет раздавать их по своему принципу — "на сеанс". Чтобы запретить ему это делать, нужно на самом компьютере, где работает веб-сервер, создать файл nethasp.ini со следующим содержимым:
[NH_COMMON]
NH_IPX = Disabled
NH_NETBIOS = Disabled
NH_TCPIP = Disabled
[NH_TCPIP]
NH_USE_BROADCAST = Disabled
Эти настройки полностью отключают все сетевые протоколы, по которым модуль 1С мог бы искать менеджер лицензий. В результате веб-сервер не сможет получить лицензию и не будет ее раздавать, а тонкие клиенты пользователей будут получать ее самостоятельно напрямую.
Важно: как и предыдущий, этот метод работает только при использовании тонкого клиента. При доступе через браузер лицензию всегда будет запрашивать веб-сервер.
Иногда возникает ситуация, когда после обновления платформы 1С привычная схема работы с лицензиями перестает функционировать. Если вы уверены, что никаких настроек не меняли, но лицензии стали расходоваться некорректно или вовсе не обнаруживаются, стоит проанализировать причину.
Часто это связано с тем, что ранее для обхода ограничений лицензирования использовались неофициальные методы: эмуляторы ключей, патчи или "кряки". Разработчики платформы 1С постоянно совершенствуют механизмы защиты. Каждое новое обновление может изменять алгоритмы проверки ключей, делая старые методы обхода неработоспособными. В результате после обновления система начинает работать по штатным правилам, что и приводит к ошибке "Лицензия не обнаружена" или к повышенному расходу лицензий. В этом случае единственно верный путь — переход на одну из легальных и стабильных схем лицензирования, описанных выше.