Пул приложений не может быть удален так как в нем содержатся приложения
У меня есть приложение в одном из моих пулов приложений, у которого есть виртуальный путь '/Site/login.aspx'. Я хочу удалить его, но он больше не существует на моем компьютере, и это вызывает у меня проблемы с настройкой AppFabric.
Я понимаю, что вы можете удалить эти фантомные приложения, воссоздав приложение в IIS, а затем нажав Remove. Это избавит приложение от пула, но в этом случае я не могу воссоздать приложение из-за /login.aspx в виртуальном пути
Любые идеи, как удалить эту ошибочную запись?
Поскольку у меня была такая же проблема; пулы приложений с приложениями, которые больше не существовали, я провел некоторое исследование и, наконец, смог решить проблему.
Вот несколько шагов:
- Найдите и отредактируйте конфигурационный файл IIS 7 «applicationHost.config» с помощью текстового редактора. Он должен храниться в « C: \ windows \ system32 \ inetsrv \ config ». Поскольку папка каким-то образом «защищена», я обычно редактирую, как показано ниже:
- Откройте проводник Windows
- Перейдите к разделу «C: \ windows \ system32 \ inetsrv \ config»
- Скопируйте файл "applicationHost.config"
- Вставьте его в папку, в которую вы можете ее отредактировать, например. ваш рабочий стол
- Откройте его с помощью своего редактора и отредактируйте его
- Скопируйте его с помощью проводника Windows на «C: \ windows \ system32 \ inetsrv \ config»
Это сработало для меня, если оно не работает для вас, пожалуйста, разместите здесь комментарий. Хорошая помощь была публикация на форуме IIS .
Это, вероятно, безопаснее и проще, чем редактирование applicationHost.config.
- Показать устаревшее приложение X и запомнить (старый) путь Y
- Создайте (старый) путь /папку Y с помощью проводника
- Обновить консоль управления IIS
- Вы найдете только что созданную папку Y и назначенное приложение X
- Щелкните правой кнопкой мыши (старое) приложение X и выберите «Удалить»
- Удалить путь Y с помощью проводника
- Еще раз обновить консоль управления IIS.
- Hurray
Решения для детей не удаляются автоматически, и диспетчер IIS не может отображать их в дереве, так что это ваша проблема .
Быстрый и надежный способ - использовать скрипт PowerShell для получения всех приложений, проверить, существует ли физический путь, а если нет, удалите приложение:
- Выберите сайт с приложениями Phantom в пуле приложений.
- В правой части меню «Действие» выберите «Просмотреть приложения». В этом списке должны отображаться все приложения, которые находятся на сайте, Phantom или нет.
- Все, что вам нужно сделать, это выбрать приложение и выбрать «Удалить» в правом меню «Действие».
Почему бы не отредактировать MetaBase.xml напрямую? Конечно, сделайте резервную копию до этого.
Или создайте пул «temp», переместите туда все другие приложения, удалите пул источников и переименуйте (если необходимо) новый пул.
Описание ошибки 503 на IIS
Не так давно я устанавливал отказоустойчивую службу Remote Desktop Services High Availability на базе Windows Server 2019. Сами роли установились корректно и без ошибок в мастере, я успешно создал коллекцию, опубликовал RemoteApp приложения и хотел их протестировать, но какого же было мое удивление, когда я в место привычной формы авторизации увидел ошибку:
Сразу могу сказать, что данную проблему вы можете встретить в любом продукте компании Microsoft, где в качестве веб движка используется служба IIS (Internet Information Services). Из популярных:
- RDS фермы
- Share Point
- Exchange
- Просто сайты на IIS
Сама проблема связана в связке IIS и Net.Framework. Обычно ошибка указывает на то, что веб-страница или запрос ресурса понятен серверу, но последний не может выполнить его по той или иной причине, или же из-за банальной перегрузки, когда не хватает ресурсов.
Методы устранения ошибки 503 на IIS
Сразу скажу, что вам придется в большинстве случаев попотеть, чтобы найти причину падения вашей службы, но обо всем по порядку. Из причин можно выделить:
- Отсутствие прав у учетной записи, которая запускает пул приложений
- Вы запускаете пул в режиме 32 бита
- У вас просто не работает пул приложений
- Проблема с NET.Framework
- Проблема на уровне операционной системы из-за ошибок целостности
Переустановка системы
Как бы это смешно не звучало, но в последнем случае у меня после того, как я все перепробывал чтобы устранить ошибку 503 на IIS, уже кончились идеи и я просто снес все так как система была чистая и поставил заново, но уже более свежий дистрибутив и о чудо проблема ушла.
Не знаю, в чем было дело, то ли глюки при обновлении Windows Server 2019, то ли что-то со сборкой которая у меня была, не могу точно сказать. До переустановки у меня была версия Windows 1809 (Сборка ОС 17763.1282)
Так, что если у вас только, что установленная Windows Server 2019, то попробуйте ее снести и установить заново, это может быть куда быстрее чем заниматься траблшутингом, самое ценное это ваше время, лучше уж провести его полезнее.Проверка работы NET.Framework
По умолчанию в Windows Server 2019 при установке добавляется NET.Framework версии 4.7. Очень часто он может быть добавлен кривовато. В случае с Remote Desktop Services мне пришлось:
В результате данного шаманства в сможете запустить RDweb на вашей RDS ферме минуя ошибку "Service Unavailable: HTTP Error 503. The service is unavailable".
Но перед всеми этими рокировками я вам советую, как и в случае с зависанием пула IIS обратиться к логам и попытаться там найти, что-то что даст нам направление для поиска информации. Напоминаю посмотреть логи Windows вы можете через оснастку "Просмотр событий" или веб-сервис Windows Admin Center. Советую смотреть четыре журнала. Первые два стандартные, это "Система" и "Приложения". Например вы можете увидеть вот такое событие с предупреждением:
Код ID 1309: Event code: 3005
Event message: Возникло необработанное исключение.
Event time: 30.06.2020 18:34:41
Event time (UTC): 30.06.2020 15:34:41
Event ID: aa3cbb1255f3432d813e6c5cb75395ed
Event sequence: 14
Event occurrence: 1
Event detail code: 0Application information:
Application domain: /LM/W3SVC/1/ROOT/RDWeb/Pages-2-132380048755425068
Trust level: Full
Application Virtual Path: /RDWeb/Pages
Application Path: C:\Windows\Web\RDWeb\Pages\
Machine name: RDSH03Process information:
Process ID: 3416
Process name: w3wp.exe
Account name: IIS APPPOOL\RDWebAccessИз которого понятно, что у меня не запущен пул. Откройте оснастку IIS и перейдите в раздел "Пулы приложений". Далее найдите нужный, в моем примере это RDWebAccess. Как видно у него статус "Остановлено", попробуйте его запустить.
Если пул не запускается, то я вам советую активировать в просмотре событий два дополнительных журнала:
- Microsoft-Windows-IIS-Configuration/Administrative
- Microsoft-Windows-IIS-Configuration/Operational
Так же что-то полезное вы можете найти в текстовом файле располагающемся по пути:
Как видно из файла у меня был выключен пул "2020-07-01 08:34:12 ::1%0 62570 ::1%0 443 HTTP/2 GET /RDWeb 5 503 1 Disabled RDWebAccess". У вас может быть тут другая ошибка.
Вы можете выполнить в PowerShell вот такой запрос по получению информации из данного файла, только для 503 кода.
Отключение 32 битного режима на пуле IIS
В журнале Microsoft-Windows-IIS-W3SVC-WP вы можете увидеть ошибку с кодом события: 2282, где:
Не удалось загрузить модуль DLL из-за ошибки в конфигурации. Текущая конфигурация поддерживает только загрузку образов для x86 архитектуру процессора. Поле данных содержит номер ошибки.По умолчанию 32-разрядная поддержка отключена в пулах приложений. Если не требуется поддержка 32-разрядных, проверьте параметры каждого из пулов приложений убедитесь, что значение Разрешить 32-разрядные приложения имеет значение False.
Откройте дополнительные параметры у нужного пула, через контекстное меню.
Еще раз проверьте что параметр Enable32bitAppOnWin64 (Разрешить 32-разрядные приложения) имеет значение "False".
Проверка учетной записи от которой запускается пул
Я очень часто встречал безалаберных системных администраторов, которым было лень создавать отдельные учетные записи для каждой службы или сервиса с которой они работают. Они делали просто, запускали все из под себя с максимальными правами или для теста так делали и забывали, что так оставили. Потом с течением времени учетную запись могут отключить или сменить пароль, что сразу делает ваш пул неработоспособным, он просто не может запустить его. Исходя из этого проверьте данную ситуацию. В дополнительных параметрах найдите раздел "Удостоверение" и посмотрите от имени кого у вас запущен ваш пул, по умолчанию должна быть встроенная учетная запись "ApplicationPoolidentity".
При необходимости вы можете выбрать другую учетную запись для запуска пула. После изменения, обязательно перезапустите пул, а лучше саму службу IIS.
Отключение Load User Profile на пуле IIS
Когда пользователь входит в систему в интерактивном режиме, система автоматически загружает профиль пользователя. Если служба или приложение олицетворяет пользователя, система не загружает профиль пользователя. Поэтому служба или приложение должны загрузить профиль пользователя с помощью LoadUserProfile .
Службы и приложения, которые вызывают LoadUserProfile, должны проверить, есть ли у пользователя временный профиль. Если пользователь имеет перемещаемый профиль, указать путь к нему в качестве lpProfilePath члена PROFILEINFO.
Для IIS этот параметр указывает, должна ли служба загружать профиль пользователя для удостоверения пула приложений. Если значение этого параметра "True", то служба IIS загружает профиль пользователя для удостоверения пула приложений. Если необходимо поведение IIS 6.0 без загрузки профиля пользователя для удостоверения пула приложений задайте значение "False". Так, что если получаете "HTTP Error 503. The service is unavailable" и ничего не помогает, то пробуем его отключить.
Не создает временный файл конфигурации пула
Ошибку "Service Unavailable: HTTP Error 503. The service is unavailable" вы легко можете ловить из-за того, что ваш пул по какой-то причине не может создать временный файл конфигурации и об этом может свидетельствовать предупреждение в логах:
Службе активации процессов Windows не удалось создать файл конфигурации пула приложений для пула приложений < DefaultAppPool >. Тип ошибки: «5». Чтобы решить эту проблему, убедитесь, что файл applicationhost.config указан правильно, и повторите последние изменения конфигурации. Поле данных содержит номер ошибки. Все происходит по причине того, что с лужба активации Windows (WAS) создает временный файл конфигурации для каждого пула приложений IIS в папке C:\inetpub\temp\appPools во время обычной работы.На начальном этапе обновления "Центр обновления Windows" сканирует существующие папки и файлы и записывает их пути для восстановления после обновления. Однако, поскольку файлы конфигурации являются временными, они удаляются при остановке WAS.
На следующем этапе Центра обновления Windows эти ранее отсканированные файлы и папки копируются во временную папку обновления. После обновления Windows "Центр обновления Windows" создает символическую ссылку на каждую папку, которая была скопирована во временное местоположение обновления, прежде чем он пытается восстановить эти файлы и папки в их исходное местоположение.
Однако поскольку эти временные файлы конфигурации больше не существуют, Центр обновления Windows не удаляет символические ссылки.
Чтобы решить эту проблему, вручную удалите символические ссылки, созданные "Центром обновления Windows". Для этого выполните следующие действия:
net stop WAS /y
rmdir /s /q C:\inetpub\temp\appPools
net start W3SVC Stop-Service -Force WAS
Remove-Item -Recurse -Force C:\inetpub\temp\appPools\*
Start-Service W3SVCДва сайта на 443 порту
Как видно сервер слушается.
Если вы когда-нибудь столкнетесь с такой проблемой как 503 ответ, то попробуйте остановить службу веб-публикации
И после этого опять запустить команду на прослушивание, если и в этом случае вы видите, что 443 порт ответил, то поздравляю у вас есть другой сервис мешающий IIS.
Когда веб-сервер не-IIS установлен в Windows, он устанавливает ACL для порта, который будет прослушивать. Вы можете увидеть ACL, который ссылается на порт 443.
На самом деле, есть две записи для порта 443. Тот, у кого GUID все в порядке, так как он предназначен только для конкретного приложения через заголовок узла, а не по всему пространству имен.
Второе я вычислил через TCPView, это было приложение Dell EqualLogic SAN Headquarters, установленное на этом конкретном сервере, оно вызывало проблему, поэтому я решил удалить его, так как оно больше не нужно.
Хоть я и удалил Dell EqualLogic SAN Headquarters с сервера, это не удалило ACL, назначенный порту 443.
Поскольку деинсталляция приложения не решила проблему, я решил принудительно удалить ACL
После удаления этой записи и перезапуска веб-службы проблемы с прослушиванием IIS через порт 443 были решены.
Кстати можно в логах посмотреть кто установил ACL, но там не всегда все подробно. Выполните:
1. Общий план
В принципе уже этой схемы достаточно для прохождения интервью в большинстве компаний и получения общего представления об архитектуре IIS. Но если вы не для галочки сюда зашли, то прошу следовать далее.
2. Крупный план
Теперь остановимся чуть поподробнее на каждом из упомянутых компонентов.
2.2. World Wide Web Publishing Service (W3SVC)
Рис.2. Рабочий процесс со службами W3SVC и WAS.- NetTcpActivator для протокола TCP;
- NetPipeActivator для Named Pipes;
- NetMsmqActivator для Message Queuing (ака MSMQ).
Но всё-таки наиболее важным для нас адаптером является именно WWW-служба, т.ч. остановимся чуть подробнее на двух оставшихся от IIS 6 функциях.
2.3. Windows Process Activation Service (WAS)
- Адаптеры прослушивателей (Listener adapters) – специальные службы Windows, работающие с конкретным протоколом и взаимодействующие с WAS для направления запросов к правильному рабочему процессу.
- Собственно WAS. Она ответственна за создание рабочих процессов и управление их временем жизни.
- Исполняемый файл w3wp.exe – шаблон рабочего процесса.
- Менеджер приложений управляет созданием и утилизацией доменов приложений (application domains), которые хостятся внутри рабочего процесса.
- Обработчики протоколов – протоколозависимые компоненты внутри рабочего процесса, ответственные за обмен данными между конкретным адаптером и рабочим процессом. Есть 2 типа обработчиков протоколов: у процесса (process protocol handler — PPH) и у домена приложения (AppDomain protocol handlers — ADPH).
Рис. 4. Компоненты w3wp.exe для взаимодействия с внешними компонентами.А соответствующие компоненты PPH и ADPH настраиваются в дотнетовском machine.config:
В конфигурационном файле веб-сервера ApplicationHost.config вместе с настройками приложений хранятся связки (bindings), определяющие параметры входящих запросов, которые будут направляться данному приложению. Такими параметрами являются название сетевого протокола, IP-адрес сервера, доменное имя и порт сайта. Эти параметры должны быть уникальными среди работающих приложений для однозначной идентификации целевого приложения. Служба WAS отслеживает это ограничение и не даст вам запустить сайт, у которого это условие не соблюдено, либо предложит остановить сайт с такой же связкой.
2.4. Пул приложений
При конфигурации веб-приложения помимо привязок (binding) к параметрам запросов и прочих настроек указывается принадлежность к пулу приложений. Пул приложений стал нововведением в IIS 6 и был призван обеспечить изоляцию веб-приложений друг от друго и тем самым повысить стабильность работы веб-сервера в целом. Суть заключается в том, что код приложения выполняется внутри специального процесса Windows – w3wp.exe. Поэтому исключение внутри веб-приложения приведёт к краху только этого процесса и никак не повлияет на доступность веб-приложений в других пулах и работу служб IIS. Более того, служба WAS попытается заново запустить упавший сайт, и внешние клиенты могут даже не заметить проблем в работе сервера.
Для управления некоторыми параметрами отдельно взятого рабочего процесса w3wp.exe в IIS используется пул приложений. Наиболее часто используемыми из них являются учётная запись, под которой будет запущен процесс, ограничения для очереди запросов, различные таймеры и счетчики для автоматического перезапуска процесса, архитектура x86/x64 (в IIS 7.x) и некоторые другие (рис. 5), о чём любопытный читатель может с лёгкостью прочесть в MSDN и любимом поисковике. Т.о. можно говорить (с определёнными оговорками, см. тж. последний абзац в 2.5) о тождественности процесса w3wp.exe и пула приложений.
Рис. 5 Дополнительные настройки пула приложений
Рис. 6. Идеология модулей в IIS.На практике самое важное, что необходимо учитывать при разработке и развёртывании веб-приложений, – это частичная несовместимость этих двух режимов. Т.е. при переводе сайта (точнее пула приложений, в котором работает сайт) из классической модели во встраиваемую практически всегда потребуется корректировка кода (хоть, возможно, и не значительная), а также тщательное тестирование.
2.5. Домен приложения, приложение
Ещё один важный момент, который хотелось бы здесь отметить. По умолчанию каждый отдельный рабочий процесс может использовать все имеющиеся на сервере процессоры/ядра, а пул приложений работает на одном рабочем процессе и, следовательно, веб-приложение работает внутри одного IIS-приложения. Тем не менее, вы можете настроить web garden, увеличив кол-во рабочих процессов на пул и, следовательно, число IIS-приложений на одно веб-приложение. Вы без труда сможете найти на просторах интернета информацию о web garden, поэтому опускаю здесь подробности. Единственное, хотелось бы предупредить, что данное средство не является инструментом увеличения производительности, т.к. по умолчанию и так используются все вычислительные мощности сервера. Наоборот, на синхронизацию работы 2+ рабочих процессов уходил «лишнее» время CPU. Делается это в основном для увеличения доступности веб-приложения. Нельзя здесь также не упомянуть о веб-ферме (web farm), как о простейшем средстве балансировки нагрузки в IIS – об этом тоже достаточно статей в Сети. Это другой пример распределённого веб-приложения. Впрочем, с тем же nginx встроенная балансировка нагрузки в IIS конкуренции не выдерживает, и в реальных высоконагрузочных системах вам придётся изобретать свой велосипед или задействовать продукты сторонних производителей.
3. Что дальше?
Дальше нужно разбираться в работе модулей (в терминах IIS) и событийной модели, в которых уже происходит собственно обработка запроса, о чем упоминалось в разделе 2.4. Вообще говоря, эта тема заслуживает отдельной статьи, на которую, боюсь, меня уже не хватит. Но без этого нельзя сказать, что мы рассмотрели весь конвейер обработки запросов. Поэтому кратко пройдёмся здесь по основным моментам, которые любопытствующий читатель может проработать самостоятельно.
После развертывания сайтом можно управлять с применением средств IIS. Ниже рассматриваются наиболее полезные опции конфигурирования и способы их использования.
Создание нового сайта
IIS 8 может поддерживать множество сайтов на одном сервере. В рассмотренных примерах развертывания содержимое добавлялось к сайту по умолчанию, а в этом разделе будет показано, как создать совершенно новый сайт. Разверните древовидное представление в IIS Manager, щелкните правой кнопкой мыши на узле Sites (Сайты) и в контекстном меню выберите пункт Add Web Site. (Добавить веб-сайт. ). Откроется диалоговое окно Add Web Site, показанное на рисунке ниже:
Поле Site name (Имя сайта) должно содержать что-нибудь значащее. Оно используется для идентификации сайта в среде IIS Manager, но не влияет на содержимое сайта. В этом примере пул приложений был оставлен без изменений (пулы приложений рассматриваются далее). Поле Physical path (Физический путь) определяет местоположение, в котором IIS 8 будет искать содержимое для запросов на обслуживание, адресованных новому сайту. В этом примере на сервере был создан новый каталог D:\WebSites. Кнопки Connect as. (Подкл. как. ) и Test Settings. (Тест настроек. ) позволяют указать другие учетные данные пользователя для доступа к содержимому сайта.
Меню IP address (IP-адрес) позволяет выбрать сетевой интерфейс, который сервер будет прослушивать на предмет запросов. Для этого параметра было оставлено значение All Unassigned (Все неназначенные) - т.е. IIS будет прослушивать все интерфейсы за исключением тех, где другой сайт должен обслуживаться через этот же порт TCP. Значение Port (Порт) позволяет указать порт TCP, на котором IIS 8 будет прослушивать запросы клиентов. В общем случае каждый сайт должен обслуживаться через уникальный порт, поэтому, во избежание конфликтов с подключенным к порту 80 веб-сайтом по умолчанию, мы выбрали порт 8091.
Кроме того, отмечен флажок Start Web site immediately (Запустить веб-сайт сейчас) - т.е. сразу после щелчка на кнопке ОК сервер IIS создаст веб-сайт и начнет прослушивать запросы. Больше конфигурировать нечего, поэтому щелкните на кнопке OK, чтобы создать и запустить веб-сайт. Каждый из рассмотренных в предыдущей статье вариантов развертывания позволяет указывать сайт для развертывания - помните, что при развертывании сайты различаются по именам и используют указанные номера портов.
Создание виртуальных каталогов
При установке места назначения для примеров веб-сайтов содержимое помещается в каталог, в котором IIS 8 ищет содержимое по умолчанию. Но содержимое можно было бы разместить где-то в другом месте, а затем использовать виртуальный каталог для ссылок на него. Чтобы продемонстрировать этот подход, создадим на сервере новый каталог и скопируем в него содержимое сайта. Путь к новому каталогу выглядит следующим образом:
Чтобы связать новый каталог с IIS, откройте IIS Manager, разверните древовидное представление, щелкните правой кнопкой мыши на элементе Default Web Site и в контекстном меню выберите пункт Add Virtual Directory (Добавить виртуальный каталог). В результате откроется диалоговое окно Add Virtual Directory (Добавление виртуального каталога), показанное на рисунке ниже:
В поле Alias (Псевдоним) введите virtual. Для пути был выбран корневой каталог веб-сайта по умолчанию - т.е. любое имя, введенное в поле Alias (Псевдоним), будет добавляться в URL-адрес непосредственно после имени сервера. В поле Physical path (Физический путь) введите путь к одному из созданных ранее каталогов развертывания. Щелкните на кнопке OK, чтобы создать виртуальный каталог.
Использование пулов приложений
Пулы приложений позволяют для упрощения конфигурирования и управления группировать вместе аналогичные или связанные приложения. При этом приложения, которые включены в пулы приложений, изолируются, в результате чего проблемы, возникающие в одном пуле, не оказывают влияния на приложения из других пулов.
IIS 8 автоматически создает набор пулов приложений, в том числе пул, используемый по умолчанию при создании нового приложения. Просматривать и управлять пулами приложений можно с помощью IIS Manager - для этого достаточно развернуть элемент сервера в древовидном представлении и щелкнуть на элементе Application Pools (Пулы приложений). В результате отобразятся пулы, определенные на сервере. Пулы, определенные на нашем компьютере показаны на рисунке ниже:
Определяет имя пула приложений. После того как пул создан, его имя изменить нельзя
Этот столбец показывает, выполняется ли пул приложений - т.е. будет ли генерироваться ответ на запросы к приложениям, назначенным в пул. Подробнее это описано в разделе "Запуск и останов пула приложений"
Версия .NET Framework, которая будет использоваться для выполнения управляемого кода - в примерах развертывания эта настройка пула приложений по умолчанию была изменена. Более подробно указание версий платформы описано в разделе "Использование параллельного выполнения"
IIS 8 поддерживает два режима конвейера для обработки запросов - Integrated (Встроенный) и Classic (Классический). Расширение конвейера подробнее рассматривается в следующей статье
Учетная запись Windows, используемая для запуска приложений пула
Количество приложений, назначенных в пул; на рисунке выше видно, что пул DefaultAppPool содержит три приложения
Создание нового пула приложений
Нестандартный пул приложений можно создать, щелкнув на действии Add Application Pool (Добавить пул приложений) в правой части экрана IIS Manager. Откроется диалоговое окно Add Application Pool (Добавление пула приложений), показанное на рисунке ниже:
Щелкните на кнопке OK, и новый пул будет создан и добавлен в список IIS Manager. Щелчок на действии Advanced Settings. (Дополнительные параметры) позволит сконфигурировать детали, связанные с пулом.
Назначение приложения в пул приложений
Чтобы назначить приложение в пул приложений, выберите приложение в окне IIS Manager и щелкните на действии Basic Settings (Основные настройки) в правой части экрана. Откроется диалоговое окно Edit Application (Изменение приложения). Щелкните на кнопке Select (Выбрать) и выберите пул приложений из раскрывающегося списка, как показано на рисунке ниже. Мы выбрали специальный пул приложений, созданный в предыдущем разделе:
Щелкните на кнопке OK. Щелкните на элементе Application Pools в IIS Manager - количество приложений пула CustomAppPool в столбце Applications станет равным 1, а количество приложений пула DefaultAppPool уменьшится на единицу.
Запуск и останов пула приложений
Использование параллельного выполнения
Читайте также: