При развертывании веб-клиента 1С:Предприятия на веб-сервере Microsoft Internet Information Services (IIS) администраторы нередко сталкиваются с ситуацией, когда файловая база открывается корректно, а база в режиме «клиент-сервер» зависает: в браузере отображается начальная заставка 1С с вращающимся индикатором, но форма авторизации и выбора пользователя так и не появляется. Проанализируем, почему возникает эта ошибка и как правильно настроить веб-сервер без выдачи избыточных прав администратора.
Причины зависания клиент-серверной базы при запуске в веб-клиенте
Выясним причину такого поведения веб-сервера. В файловом варианте расширение веб-сервера wsisapi.dll обращается напрямую к файлам базы данных 1Cv8.1CD. В клиент-серверном режиме архитектура взаимодействия существенно меняется:
Ограничения стандартного пользователя IUSR: модуль расширения веб-сервера инициирует сетевое TCP-соединение с кластером 1С (порты 1540, 1541, 1560–1591), выполняет запись во временные системные каталоги (%TEMP%, C:\Windows\Temp) и считывает настройки платформы. Встроенная учетная запись IUSR по умолчанию изолирована от системных ресурсов, что приводит к блокировке или долгому ожиданию ответа.
Несоответствие прав доступа на исполняемые файлы платформы: для инициализации библиотеки расширения рабочему процессу IIS необходим доступ на чтение и выполнение к каталогу платформы, где расположена используемая версия 1С:Предприятия.
Проблемы с получением клиентской лицензии: веб-клиент не обращается к аппаратному ключу HASP на клиентском ПК. Лицензию должен предоставить сервер 1С либо веб-сервер. Если выдача лицензий сервером отключена, модуль пытается найти программные лицензии в каталогах C:\ProgramData\1C\licenses, куда у стандартного анонимного пользователя нет доступа.
Несоответствие разрядности модуля ISAPI: при работе с 64-разрядным сервером 1С попытка задействовать 32-разрядную библиотеку без включения поддержки 32-битных приложений в пуле приводит к сбою загрузки нативных компонентов.
Рассмотрим по шагам безопасные и проверенные способы устранения неполадки.
Способ 1. Настройка прав доступа к каталогу платформы 1С
Разберем базовую настройку прав файловой системы. Службы IIS обращаются к модулю wsisapi.dll от имени группы IIS_IUSRS. Если прав на чтение и выполнение недостаточно, процесс зависает или завершается сбоем.
Откроем проводник Windows и перейдем к каталогу с установленной платформой 1С (для x64-платформы: C:\Program Files\1cv8\8.3.X.XXXX\bin, для x86-платформы: C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin).
Нажмем правой кнопкой мыши на папку bin и перейдем в Свойства -> вкладка Безопасность.
Нажмем кнопку Изменить, затем Добавить.
В поле выбора объектов введем имя локальной группы IIS_IUSRS и подтвердим выбор.
Назначим группе IIS_IUSRS разрешения «Чтение и выполнение» (Read & Execute), «Список содержимого папки» (List folder contents) и «Чтение» (Read).
Применим изменения.
Способ 2. Переключение анонимной проверки подлинности на удостоверение пула
Назначение учетной записи локального администратора для анонимного входа, хотя и решает проблему с зависанием, создает критическую уязвимость в безопасности сервера. Вместо этого настроим работу через контекст встроенного удостоверения пула приложений.
Откроем Диспетчер служб IIS (IIS Manager).
В дереве подключений развернем узел сервера, перейдем в Сайты -> выберем опубликованное веб-приложение 1С.
В центральной панели дважды нажмем на значок Проверка подлинности (Authentication).
Выделим пункт Анонимная проверка подлинности (Anonymous Authentication) и в правой панели действий нажмем Изменить....
В появившемся окне переключим радиокнопку с «Определенный пользователь» (IUSR) на «Удостоверение пула приложений» (Application pool identity).
Нажмем ОК.
Теперь запрос веб-клиента обрабатывается от имени служебного виртуального аккаунта пула (например, IIS AppPool\DefaultAppPool), обладающего правами члена группы IIS_IUSRS.
Способ 3. Оптимизация параметров пула приложений IIS
Проанализируем параметры рабочего процесса IIS (w3wp.exe), чтобы исключить конфликты при взаимодействии с библиотеками платформы 1С:
В диспетчере IIS перейдем в раздел Пулы приложений (Application Pools).
Выберем пул, назначенный нашей опубликованной базе 1С, и нажмем Дополнительные параметры... (Advanced Settings).
Найдем параметр Версия среды .NET CLR (.NET CLR Version) и установим значение Без управляемого кода (No Managed Code), так как интеграция 1С с IIS реализована через неуправляемый интерфейс ISAPI.
В секции Модель процесса (Process Model) найдем параметр Загрузить профиль пользователя (Load User Profile) и переведем его в значение True. Это позволяет корректно инициализировать ветки реестра пользователя и локальные криптографические сервисы.
Нажмем ОК и перезапустим пул приложений.
Способ 4. Проверка разрядности модуля wsisapi.dll и ограничений ISAPI
Если веб-сервер настроен под 64-разрядные процессы, убедимся, что публикация использует соответствующий бинарный файл.
Перейдем в каталог физической публикации базы (по умолчанию C:\inetpub\wwwroot\ИмяБазы\) и откроем файл web.config в текстовом редакторе.
Проверим путь к обработчику запросов в секции handlers. Для 64-битной платформы путь должен вести в каталог Program Files, а не Program Files (x86):
В диспетчере IIS перейдем на корневой узел сервера и откроем Ограничения ISAPI и CGI (ISAPI and CGI Restrictions).
Убедимся, что путь к расширению указывает на правильный файл wsisapi.dll и для него установлен статус Разрешено (Allowed).
Способ 5. Проверка выдачи лицензий и сетевой связности с кластером
Завершающим шагом проверим настройки соединения с кластером серверов 1С:
Откроем файл default.vrd в каталоге публикации базы и найдем строку подключения ib. Обратим внимание на параметр Srvr="ServerName".
Проверим с сервера IIS разрешение сетевого имени хоста кластера 1С с помощью утилиты ping ServerName. Если IP-адрес не разрешается через DNS, пропишем соответствие в системном файле C:\Windows\System32\drivers\etc\hosts.
Откроем консоль Администрирование серверов 1С:Предприятия, найдем опубликованную информационную базу и в ее свойствах проверим параметр Разрешить выдачу лицензий сервером 1С:Предприятия. Установим его в значение Да, чтобы клиент не зависал в попытках обнаружить локальный аппаратный или программный ключ.
Выполнив указанные шаги, мы восстановим нормальный запуск веб-клиента клиент-серверной базы без компрометации безопасности веб-сервера.