Общая информация
Для начала уточним, что для корректной работы 1С с веб-серверами используются библиотеки, которые используют API веб-сервера, так называемые Internet Server API (ISAPI). Для IIS такая библиотека называется «wsisapi.dll», и находится она в папке bin установленной платформы 1С. Именно поэтому при установке IIS необходимо проследить, чтобы был выбран компонент «Расширения ISAPI (eng: ISAPI Extensions)».
Общение с веб-сервером происходит через Менеджер. Функционально Менеджер IIS является просто GUI оболочкой для отображения информации из конфигурационных файлов формата XML. Быстро посмотреть их можно через «Редактор конфигурации (eng: Configuration Editor)» -> «Поиск по конфигурации (eng: Search Configuration)».
На практике, все, что нужно для 1С, изменяется в конфигурационном файле хоста «ApplicationHost.config». Этот файл можно открыть в любом удобном текстовом редакторе.
В конфигурационном файле хранятся такие интересующий нас настройки, как установленные модули ISAPI, настройки пулов приложений, а также сайтов.
Также каждая публикация 1С может иметь собственные настройки конфигурации, которые накладываются на общие настройки хоста и имеют больший приоритет. Это файл «web.config», который лежит в папке публикации вместе с файлом описания публикации «default.vrd».
Настройка веб-сервера для работы с 1С
На девственно чистый IIS установим модуль ISAPI от 1С:
Находясь в корне сервера выберем пункт настройки «Сопоставления обработчиков (eng: Handler Mappings)», и выберем пункт «Добавить сопоставления сценария (eng: Add Script Map)», и пропишем наш обработчик 1С:
Путь запроса (eng: Request path): * (любой, так как предполагается, что на данном веб-сервере будут только приложения 1С)
Исполняемый файл (eng: Executable): <путь к актуальной платформе>\bin\wsisapi.dll
Имя (eng: Name): 1С (любое на ваш вкус, значения не имеет)
Задать «Ограничения запроса (eng: Request Restrictions)»:
На закладке «Сопоставление (eng: Mapping)» убрать галку, а на закладке «Доступ (eng: Access)» установить уровень доступа «Выполнение (eng: Execute)».
При сохранении настроек Менеджер IIS спросит, разрешить ли данное расширение ISAPI? Согласимся с ним, нажмем «Да».
Таким образом, в конфигурационный файл хоста «ApplicationHost.config» в тег «handlers» запишется информация о нашем модуле обработчике:
А также в тег «isapiCgiRestriction» пропишется разрешение на исполнение нашего модуля:
Если в менеджере строка обработчика выделена серым, и статус у него «Отключен», то проверьте общие настройки разрешений функций. Возможна следующая ситуация:
Разрешение «Выполнение (eng: Execute)» должно быть включено.
Добавление базы на веб-сервер
По умолчанию на IIS создается сайт «Default Web Site», данные этого сайта расположены физически на сервере по пути: «C:\inetpub\wwwroot».
Если открыть Internet Explorer и попробовать перейти по адресу localhost, то мы обнаружим внутреннюю ошибку сервера 500. Но ведь в папке «C:\inetpub\wwwroot» лежит файл «iisstart.htm», и он даже присутствует в списке настройки «Документ по умолчанию (eng: Default Document)», но почему же сервер не хочет его отображать? И тут мы вспоминаем, что для всего сервера указали в модулях обработчиках, что «*» любые запросы должен обрабатывать ISAPI модуль от 1С. Убрав эту настройку у сайта и перезагрузив страницу обнаружим, что загрузится приветственная страница IIS. Именно поэтому, если на данном веб-сервере планируется размещать не только приложения 1С, то модуль ISAPI устанавливаем для каждой базы, а не для сервера или сайта в целом.
Задача: Опубликовать локально базу для обращения к ней по протоколу http.
Итак, добавим на наш сайт «Default Web Site» новое приложение: «base1C»:
Правой кнопкой на «Default Web Site» -> «Добавить приложение (eng: Add Application)»
Псевдоним (eng: Alias): base1C (имя базы как она будет отображаться в строке браузера, т.е. http://localhost/base1C)
Физический путь (eng: Phisical path): C:\inetpub\wwwroot\base_1C (создадим в каталоге сайта папку «base_1C», нижнее подчеркивание добавлено, чтобы показать, что имя папки ни на что не влияет, и вообще папка может быть где угодно, главное, чтобы были права для ISS_IUSERS).
Пул приложений (eng: Application pool): DefaultAppPool (оставим по умолчанию).
Внимание! В рамках одного пула приложений все приложения должны запускаться под одним ISAPI модулем, т.е. единой платформой.
Нажимаем «ОК» - сохраняем настройку нашего приложения.
Вообще, пулы приложений в контексте 1С нужны для того, чтобы разделить базы, работающие на разных платформах, ведь в рамках одного пула платформа 1С (читай ISAPI модуль) должна быть одинакова. Если нужно запустить какую-то базу под 32х битной платформой, то у приложения указываем в настройке «Сопоставления обработчиков (eng: Handler Mappings)» модуль нужной 32х битной платформы, переносим это приложение в отдельный пул приложений, и у этого пула приложений в значениях по умолчанию разрешаем 32-разрядные приложения.
На уровне файла конфигурации хоста при этом в теге «sites» у тега <site name="Default Web Site" id="1"> пропишется наше приложение с именем, путями и пулом приложений.
Итак, мы указали нашему веб-серверу, что если кто-то обратится по пути http://localhost/base1C, то нужно пройти в папку "C:\inetpub\wwwroot\base_1C", и с помощью ISAPI модуля отобразить то, что там находится. При публикации из конфигуратора в эту папку попадает файл описания публикации базы 1С «default.vrd». Подробно про структуру этого фала можно подчерпнуть из статьи на ИТС: https://its.1c.ru/db/v83doc/bookmark/adm/TI000000379. Но, так как мы не пользуемся конфигуратором в учебных целях, то напишем этот файл сами.
Файл «default.vrd» по факту, сюрприз-сюрприз, имеет структуру XML файла.
Главный тэг здесь «point», у которого есть атрибуты:
«base» - относительный путь нашей публикации («/base1C»)
«ib» - собственно строка подключения к нашей базе 1С так, как вы ее видите в окне списка баз («File=С:/bases/demo;» - для файловой базы и «Srvr=server;Ref=demo;» - для клиент-серверной)
В некоторых случаях необходимо организовать автоматическую авторизацию под конкретным пользователем. В таком случае в строку подключения дописываются параметры пользователя: «Srvr=server;Ref=demo;Usr=test;Pwd=Pass1234»
«enable» - разрешение работы в тонком или веб-клиенте («true» или «false», если не указан по умолчанию «true»)
По сути, содержание нашего файла описания публикации минимально может выглядеть вот так:
<point base="/base1C" ib="Srvr=server;Ref=demo;">
</point>
При этом замечу, что данное описание публикации ничего не запрещает, все веб-сервисы и http-сервисы базы будут доступны.
В итоге веб-сервер смотрит на этот файл описания и понимает, что если клиент обратился по пути http://localhost/base1C, то его необходимо соединить с клиент-серверной базой «demo» находящейся на сервере «server».
Расположим написанный файл «default.vrd» в директории «C:\inetpub\wwwroot\base_1C», откроем Internet Explorer и, перейдя по адресу http://localhost/base1C увидим, что открылась наша база. Profit!
Также мы можем задать настройки веб-сервера для конкретного приложения, к примеру свой модуль ISAPI, или запрет обработки http запросов «HEAD», и тогда в папке с фалом описания публикации «default.vrd» появится файл конфигурации сервера «web.config».
Постфактум должен сказать, что такой метод публикации предназначен исключительно в учебных целях для понимания механизмов работы связки IIS и 1С. Также он может пригодиться, когда необходимо опубликовать базу не в корень сайта. В этой статье не описаны такие нюансы как раздача прав на папки с файловыми базами, папки платформы, регистрация SSL сертификатов и многое другое. Это темы отдельных статей.
Также хотелось бы упомянуть альтернативный способ публикации базы 1С с помощью консольной утилиты «webinst», которая находится в папке «bin» установленной платформы. Про работу с данной утилитой хорошо написано на сайте ИТС: https://its.1c.ru/db/v837doc#bookmark:adm:TI000000201