Iis не запускается пул приложений
Использование веб-сервера и публикаций информационных баз — один из способов оптимизации 1С. Особенно при работе с ИБ в файловом варианте. Так безопаснее. Сотрудники подключаются к ИБ 1С через браузер или тонкий клиент , не имея прямого доступа к файлам.
В статье расскажем, как решали возникающие вопросы по настройкам Internet Information Services. Через призму своего опыта и коллег.
Сертификат выдается сроком на 90 дней. Для автоматического продления создается периодическое задание в Планировщике. При запуске задачи сайт должен быть доступен (пройти проверку домена) по 80-му порту.
II. Типовая настройка и публикация информационных баз на IIS
На что обратить внимание:
1. Состав компонентов IIS — в Интернете полно инструкций и указаний. Повторяться не будем.
2. Установка 1С необходимой разрядности . Варианта 2: x86 (32-разрядное приложение) или x64. Обязательно выбираем «Модули расширения веб-сервера».
3. Права для встроенной группы /пользователю веб-сервера (IUSR) на папки:
- с установленной платформой — на «чтение и выполнение» (для старта процессов);
- самих расположений ИБ — на «изменение» (в случае файлового варианта).
4. Публикация базы через Конфигуратор 1С . Возможно потребуется открыть программу с повышенными правами — «Запуск от имени администратора».
5. Для 32-разрядного клиента 1С в диспетчере IIS включаем разрешение запуска ( DefaultAppPool — Дополнительные параметры — Разрешены 32-разрядные приложения = True ). Для 1C x64 — значение не меняем.
6. На странице сопоставления обработчиков для «1С Web-service Extension» потребуется указать путь к исполняемому модулю :
- x86 — «C:\Program Files (x86)\1cv8\8.3.x.xx\bin\wsisapi.dll»;
- x64 — «C:\Program Files\1cv8\8.3.x.xx\bin\wsisapi.dll».
Либо изменяем путь к библиотеке в файлах web.config через Блокнот (располагается, как правило, в c:\inetpub\wwwroot\<имя базы>).
Если в п. 2 все сделано правильно — по указанному пути должен присутствовать файл wsisapi.dll.
7. В частных случаях требуется перезапуск служб IIS . Выполните «Перезапустить» в оснастке управления или перезагрузите сервер.
✅ Соблюдаем соответствие разрядности: если запускаем и публикуем 64-разрядный клиент 1С:Предприятие, то dll также должна быть 64-битной версии.
Если публикуем 32-разрядную версию 1С, то ставим разрешение запуска 32-разрядных приложений на IIS и проверяем путь к wsisapi из каталога x86.
III. Если клиент 1С зависает при подключении к базе по web
Прежде посмотрите этот материал — там общие рекомендации.
Другой случай. Файловая ИБ опубликована на IIS. После авторизации зависает на эмблеме 1С. При открытии Конфигуратора — все нормально.
В журналах Windows ошибка «Процесс, обслуживающий пул приложений "1С", не ответил на команду ping».
- проверьте права на папку с базой 1С для IUSR/IIS_IUSRS, уровень доступа — на «изменение»;
- в оснастке IIS «Пулы приложений — <пул_1С> — Дополнительные параметры — Модель процесса» задайте для « Максимальная задержка отклика при проверке связи » значение, превышающее 90 секунд;
- посмотрите на поведение IIS при «Проверка связи включена» = False.
📝 Из справки: установка [pingingEnabled] (Проверка связи) в значение false не позволит IIS проверять, выполняется ли рабочий процесс, и таким образом сохранит его активным до остановки процесса отладки.
✅ Установка «Максимальное время отклика пинга» в большое значение позволит IIS продолжать наблюдение за рабочим процессом.
Информационная база 1C опубликована на IIS. При работе через тонкий клиент, при нажатии на «Отчеты» вываливается ошибка.
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
✅ Откройте настройки пула приложений и проверьте «Режим управляемого конвейера» = «Classic».
что будет:
- все appPools запущены, все службы работают
- iisreset выполняется (или машина перезагружается)
- IIS возвращается, но не все пулы приложений запускаются должным образом. Иногда они все возвращаются, иногда один или несколько бассейнов не заводятся. Однако их можно запустить вручную.
пулы приложений должны перезапускаться в iisreset, но они работают вне iis (в COM+) для надежности. Это означает, что они могут не вернуться, если приложение плохо себя ведет, но IIS и другие приложения(должны) вернуться. Так что да, это "нормально".
С. П. Я также хотел бы "выйти" из себя как горда пользователь iisreset. Плохая практика? Бах!; D
IIS не запускается сразу ASP.NET рабочие процессы (w3wp.exe), пока не поступит первый запрос. Когда вы говорите "не запущен", означает ли это, что вы пытаетесь получить доступ к некоторым веб-службам WCF (после iisreset), и вы получаете ошибку недоступности службы, потому что appPool не может быть запущен? Вы видите какие-либо связанные записи IIS W3SVC в журналах событий?
Если есть, они могут подсказать вам, почему они не могут начать; разместите их здесь.
была аналогичная проблема-после перезапуска IIS DefaultAppPool был остановлен.
в журналах событий приложений обнаружена ошибка:
Windows не может войти, потому что ваш профиль не может быть загружен. Проверьте, что вы подключены к сети и что сеть правильно работает. Если эта проблема не устранена, обратитесь к сетевому администратору.
DETAIL-Доступ запрещен.
исправлено путем установки в DefaultAppPool Дополнительные Параметры опции Загрузить Профиль Пользователя to False.
надеюсь, что это может быть полезно.
IIS не запускается сразу ASP.NET рабочие процессы (w3wp.exe), пока не поступит первый запрос. Когда он говорит "не запущен", это означает, что попытка доступа к некоторым веб-службам WCF (после iisreset) не удалась из-за того, что объект занимал некоторое пространство в памяти, и вы получаете ошибку недоступности службы, потому что appPool не может быть запущен.
создайте пакетный файл со следующими командами и запланируйте его.
Каждый пул приложений в IIS использует свой собственный рабочий процесс (IIS Worker Process). Удостоверение пула приложений (Application Pool Identities) представляет из себя имя учетной записи, под которой выполняется рабочий процесс этого пула.
В IIS 6.0 и IIS 7.0 пул приложений по умолчанию работал под встроенной системной учетной записью NetworkService. Эта запись не требует пароля и имеет на локальном компьютере ограниченные права, что является хорошей практикой с точки зрения безопасности. Однако под этой учетной записью могут одновременно работать разные системные службы Windows, и при использовании одного и того же идентификатора одни службы могут воздействовать на работу других.
Начиная с Windows Server 2008 SP2 для того, чтобы изолировать рабочие процессы IIS от других системных служб, можно использовать виртуальные учетные записи (Virtual Accounts). Они позволяют запускать рабочий процесс для каждого пула приложений под собственной уникальной учетной записью ApplicationPoolIdentity. Эта учетная запись не требует управления и создается автоматически при создании каждого нового пула. Также она не имеет практически никаких привилегий в системе и не использует профиль пользователя, что повышает безопасность веб-сервера.
Для примера возьмем Application Pool с именем PubSite1. Открываем Task Manager и находим рабочий процесс IIS (w3wp.exe), выполняющийся от имени PubSite1. Как видите, имя учетной записи совпадает с именем пула приложений. Дело в том, что начиная с IIS 7.5 для каждого вновь созданного пула приложений по умолчанию создается виртуальная учетная запись с именем этого пула, и его рабочий процесс запускается из под этой записи.
Настройка типа удостоверения пула приложений
При необходимости тип идентификации пула приложений можно изменить. Для этого запускаем IIS Manager, переходим в раздел Application Pools, выбираем нужный пул и открываем его свойства (Advanced Settings).
В свойствах выбираем пункт Identity.
Здесь мы указываем учетную запись, от имени которой будет работать данный пул приложений:
Кроме того, в качестве удостоверения можно использовать и обычную учетную запись пользователя. Для этого надо выбрать Custom Account, нажать кнопку Set и ввести имя пользователя и пароль. Можно указать любого доменного или локального пользователя.
Примечание. При использовании учетной записи пользователя надо отслеживать срок действия пароля и своевременно менять его.
То же самое можно сделать с помощью утилиты командной строки appcmd. Чтобы указать учетную запись, которая будет использоваться для пула приложений, используется следующий синтаксис:
appcmd set config /section:applicationpools /[name=″имя пула приложений″].processModel.identityType:SpecificUser|NetworkService|LocalService|LocalSystem
Для примера изменим тип удостоверения для пула приложений PubSite1 на NetworkService:
appcmd set config /section:applicationpools
/[name=″PubSite1″].processModel.identityType:NetworkService
Профиль пользователя
Если вы хотите настроить ApplicationPoolIdentity на использование пользовательского профиля, то надо зайти в расширенные свойства пула и перевести параметр Load User Profile в состояние True.
Настройка доступа к ресурсам
Иногда веб-приложению может потребоваться доступ к определенной папке или файлу на диске. Чтобы добавить ApplicationPoolIdentity в Access Control List (ACL):
• Запускаем Windows Explorer;
• Выбираем нужный файл или директорию, кликаем по ней правой клавишей мыши и выбираем пункт Свойства (Properties);
• Переходим на вкладку Безопасность (Security),
• Кликаем по кнопке Изменить (Edit), затем Добавить (Add);
• В поле Размещение (Locations) выбираем локальную машину;
• Вводим имя пользователя в виде ″IIS AppPool\имя пула приложений″. Так для пула приложений PubSite1 имя пользователя будет выглядеть ″IIS AppPool\PubSite1″;
• Проверяем имя клавишей Проверить имена (Check Names) и жмем ОК.
Также при желании можно воспользоваться утилитой командной строки ICACLS. Для примера дадим права на изменение для PubSite1:
ICACLS C:\Web\Pubsite1 /grant ″IIS AppPool\PubSite1″:M
Список разрешений выглядит следующим образом:
D – удаление;
F – полный доступ;
M – изменение;
RX – чтение и выполнение;
R – чтение;
W – запись.
Если ресурс находится в сети, то для доступа к нему лучше всего использовать учетную запись NetworkService. Рабочий процесс, запущенный под этим аккаунтом, для доступа к ресурсам использует учетные данные компьютера, сгенерированные при добавлении компьютера в домен. Для того, чтобы дать процессу доступ к сетевому ресурсу, в качестве пользователя указываем компьютер:
• Выбираем тип объекта (Object Type) Computers;
• В поле Размещение (Locations) выбираем домен;
• Вводим имя пользователя в виде domainname\machinename$, например contoso\SRV12$;
• Проверяем имя и жмем ОК.
Очень удобный способ предоставлять доступ к сетевым ресурсам типа файловых шар или баз данных SQL Server. Однако работает он только при наличии домена AD.
Мы столкнулись со странной проблемой с нашими развертываниями IIS.
ApplicationPools иногда не запускается должным образом, но при этом не выдает ошибок. Единственный содержащий сайт в пуле приложений не отвечает (даже не возвращает 500 или что-то подобное, просто время ожидания истекает через некоторое время).
ApplicationPool и сайты запущены и работают (не остановлены), что касается IIS.
Перезапуск сайта или ApplicationPool не решает проблему.
Однако удаление сайта и ApplicationPool и воссоздание его с идентичными свойствами исправляет это.
Как только какой-либо ApplicationPool достиг этого состояния, единственный способ решить эту проблему (насколько нам известно) - это воссоздать весь ApplicationPool.
Мы бы с радостью сделали это автоматически, но нет ошибок, которые нужно было бы вылавливать и обрабатывать соответственно.
Некоторые исходные данные:
- Мы используем IIS версии 10
- ApplicationPool запускается правильно. EventLog сообщает, что Application '<OUR_APP>' started successfully.
Мы подозреваем, что проблема может заключаться в одновременном запуске нескольких ApplicationPool (поскольку они автоматически запускаются нашим конвейером CI / CD).
Я ни в коем случае не эксперт IIS, поэтому мои вопросы:
- Возможно ли, что запуск многих пулов приложений (около 20-60), происходящих примерно в одно и то же время, вызовет такое поведение?
- Что я мог сделать, чтобы расследовать это дальше?
2 ответа
Проблема, по-видимому, была вызвана нашими сценариями развертывания, которые не дожидались, пока пулы приложений фактически перейдут в состояние Stopped , прежде чем продолжить удаление старых файлов приложений и замену их новыми и немедленно снова запустить пулы приложений.
Мы заметили связанные с этим проблемы ранее в этом году, когда файлы не могли быть удалены, потому что они все еще использовались, даже после остановки ApplicationPool (что мы «решили», реализовав механизм повтора) .
Решение
Вызов следующего кода после остановки ApplicatonPool, кажется, решает проблему .
Мы реализовали это 2 дня назад, и с тех пор проблема не возникала в более чем 100 развертываниях.
Возможно ли, что запуск многих пулов приложений (около 20-60), происходящих примерно в одно и то же время, вызовет такое поведение?
Сложно сказать. Пул приложений - это просто пустой контейнер, в основном то, что требует времени и накладывает ограничения на это число, - это то, что код вашего приложения и зависимости делают при запуске и во время выполнения с небольшими накладными расходами на предварительную компиляцию dotnet.
Что я мог сделать, чтобы расследовать это дальше?
отслеживать сами процессы w3wp.exe - это ваши пулы приложений (также известные как «домены приложений»). Они могут застрять, а не "должным образом" упасть, что похоже на ваш случай.
Предполагая, что все ваши приложения нормально работают, и вам просто нужен способ восстановления случайных сбоев, попробуйте это .
Если у вас неработающий пул приложений, запустите на своем сервере из PowerShell или ISE (от имени администратора) следующую команду, чтобы просмотреть запущенные рабочие процессы IIS:
Выше выводятся идентификаторы рабочих процессов и аргументы, используемые для их запуска. Среди аргументов вы можете увидеть имя сайта - используйте правильный ProcessId с командой Stop-Process -Force -Id X (заменив X номером ProcessId), чтобы принудительно завершить процесс. Приложение успешно запускается, когда вы пытаетесь получить к нему доступ после завершения процесса?
Если вы знаете имя пула приложений, который нужно убить, вы можете использовать этот код для завершения процесса:
(замените имя пула приложений на NAMEOFMYAPPPOOL и запустите от имени администратора)
Просто подумайте - попробуйте предоставить каждому пулу приложений собственную временную папку, настроенную в web.config для каждого сайта:
Перекрестные разговоры здесь во время запуска - возможный источник странностей.
После чего жмем ОК и ждем, пока все скачается и установится. По данному пункту хотел еще пояснить, что проставлены необходимые для работы 1С компоненты, ничего кроме этого мне не понадобилось пока. Данный набор ставил и на WIN 7 и на WIN10
2. Первоначальная настройка IIS.
2.1. Дать доступ службе IIS к:
- Платформа1С (C:\Program Files (x86)\1cv8),
- База1С тут точного пути, нет у каждого он свой.
Для этого на каждой из папок клацаем правой кнопкой мыши Свойство-Безопасность - Изменить - Добавить -IIS_IUSRS; IUSR и проставить галочки полного доступа. После нажатия на ОК могут появиться ошибки "Отказ в доступе" нажимайте "Продолжить" и все.
2.2. Разрешить IIS работать с 32 битными приложениями.(Этот пункт нужен если у вас WIN 64-битная а 1C 32-битная, поэтому почти всем) Заходим Панель управления - Администрирование -Диспетчер служб IIS,
3. Публикация базы данных
3.1. Установка платформы обязательно с установленной галочкой "Модуль расширения веб-сервера"
3.2. Запускаем 1С под правами администратора в режиме Конфигуратор - Администрирование - Публикация на веб-сервере.
И все, больше ничего не нужно.
Есть один совет: Если база будет доступна через 1С, нелишнее для обеспечения дополнительной безопасности опубликовывать её с именем, которое будет ничего не значить. Лучше вообще случайным набором букв и цифр (qAdsfslj- например), пользователи, даже если работают через браузер, заходят по ссылке, а вам дополнительное спокойствие, но при таком подходе есть минус, если снял базу с публикации, например, для обновления, то имя будет меняться на наименование папки базы данных, и если не сохранил где-то это имя, то начинаешь искать эту ссылку, и ладно, если баз одна -две, а если их несколько десятков, то можно и перепутать. Попав пару раз, сделал следующим образом "D:\Bases1C\Buh\qAdsfslj" - где "Buh"-название понятное для меня а вот "qAdsfslj"- имя базы при публикации.
Если после установки и настройки IIS + 1C 8.3 (на АПАЧе все работало) внутри локальной сети все хорошо, а при входе через интернет вроде все хорошо, но при формировании табличного документа происходят странные вещи, вместо значков группировок отчета выходит "разорванный листочек", и выделить ячейку в отчете не получается (хотя при двойном нажатии расшифровки работают), а еще на экране нет картинок и штрихкодов в табличном документе (отчете) но если этот же отчет сохранить в эксель или распечатать, все выходит как надо. Значит, вы "попали" так же как и я (искал решение очень долго, почему и пишу данную статью).
Перепробовал все предложенные варианты настроек в интернете, не помогло, сменил Windows (7,10, 2008), компьютер, версии 1C и IIS (7.0, 7.5, 10) не помогает. При этом нужно учесть еще и такой момент что в этой же сети уже работает один сервер IIS+1С и там все работает как надо.
А дело было в том, что после того, как я запускал сервер, я тут же делал проброс порта через роутер наружу и поскольку уже имелся сервер работающий по 80 порту, пробрасывал на альтернативный (444, 98, 90, и тд. переустановок было много). и получал печальный результат. А нужно было сначала сделать прямой проброс 80-80 зайти в 1С через Интернет. а после можно менять порт на любой. Вариант был проверен неоднократно.
Буду рад, если кому-то поможет, и не позволит потерять очень много времени и нервов.
Читайте также: