Что такое веб-сервер пустельги и как он соотносится с IIS / IIS Express?

Я разработал приложения на IIS Express и разместил их на веб-сервере IIS. С ASP.NET Core у меня есть зависимость от Microsoft.AspNetCore.Server.Kestrel, а мой запуск имеет .UseServer ("Microsoft.AspNetCore.Server.Kestrel"). Но когда я запускаю свой веб-сайт, я все равно получаю значок IIS Express на панели задач. Кто-то спросил меня, использую ли я IIS Express или Kestrel, и я не знал, что сказать!• 100001 альтернатива - даже в самых простых образцах используется пустельга.

Ответы (4)

Что такое пустельга

Это полноценный веб-сервер. Вы можете запустить приложение ASP.NET Core, используя только Kestrel.

Но когда я запускаю свой веб-сайт, я все равно получаю значок IIS Express на панели задач

В вашем приложении ASP.NET, вероятно, в каталоге wwwroot, вы увидите файл web.config, содержащий следующее:


<конфигурация>

    <обработчики>
    
    
    


Это HttpPlatformHandler. По сути, это пересылает все запросов в Kestrel. IIS Express (и IIS, если на то пошло) больше не будут запускать ASP.NET. Вместо этого они будут действовать как прокси, которые просто будут передавать запросы и ответы от Kestrel. По-прежнему существуют преимущества использования IIS, в частности, он дает вам конфигурацию безопасности, кеширование на уровне ядра и т. Д.

Я хотел бы предложить альтернативный ответ с некоторой историей, чтобы вы могли понять, почему приходит Kestrel, даже если вы используете только Windows и IIS.

В самом начале разработки ASP.NET, до 2000 года, очевидно, что Microsoft создала две части для размещения приложений ASP.NET WebForms,

  • Cassini, позже стал сервером разработки ASP.NET в Visual Studio. Это полностью управляемый веб-сервер, написанный на C # на основе HttpListener. Конечно, поскольку это предназначалось только для разработки, многие функции так и не были реализованы. Поскольку Microsoft сделала исходный код Cassini общедоступным, появились третьи стороны, которые разделили кодовую базу и добавили дополнительные функции, которые положили начало семейству Cassini.
  • Поддержка ASP.NET в IIS (версия 1). Поскольку в то время IIS был 4.0 и 5.0 / 5.1, в котором нет ничего похожего на пулы приложений, ASP.NET даже имеет свой собственный рабочий процесс (aspnet_wp.exe).

Итак, чтобы разработать веб-приложение, вы используете Cassini, а для развертывания - IIS.

  • Введение пулов приложений в IIS 6 потребовало некоторых изменений на стороне ASP.NET, поэтому aspnet_wp.exe устарело и заменено aspnet_isapi.dll. Это можно рассматривать как поддержку ASP.NET в IIS версии 2. Таким образом, приложения ASP.NET размещаются в рабочих процессах IIS w3wp.exe.

  • Введение интегрированного конвейера в IIS 7 и выше потребовало дальнейших изменений, которые заменили aspnet_isapi.dll на webengine4.dll. Это можно рассматривать как поддержку ASP.NET в IIS версии 3. Конвейеры ASP.NET и IIS унифицированы.

Как видите, ASP.NET стал намного более сложным и тесно интегрированным с IIS, поэтому Cassini начал показывать свой возраст и постепенно был заменен IIS Express (облегченный режим пользователя IIS).

Таким образом, во многих случаях, когда люди обвиняют IIS в медленной работе, они фактически должны винить ASP.NET. Сам IIS без ASP.NET работает довольно быстро и стабильно, в то время как ASP.NET не был разработан с учетом достаточного количества показателей производительности (поскольку WebForms ориентирован на довольно много производительности и RAD).

Затем, в ноябре 2014 г., был анонсирован ASP.NET 5 (позже переименованный в ASP.NET Core), ставший кроссплатформенной технологией. Очевидно, Microsoft нуждался в новом дизайне для поддержки Windows, macOS и Linux, где следует рассматривать все основные веб-серверы, nginx / Apache (или другие веб-серверы), кроме IIS.

Я думаю, многие согласятся, что Microsoft многому научилась у NodeJS, а затем спроектировала и разработала Kestrel (изначально на основе libuv, но вскоре может перейти на другие технологии). Первоначально это легкий веб-сервер, такой как Cassini, но позже добавляются дополнительные функции (например, прокомментированный другой ответ, гораздо больше функций, поэтому его можно рассматривать как полноценный веб-сервер). Несмотря на то, что он полностью управляем (существуют некоторые собственные зависимости), это больше не игрушечный веб-сервер, такой как Cassini.

Тогда почему нельзя просто использовать пустельгу? Почему все еще необходимы IIS Express и, возможно, IIS, nginx или Apache? Это в первую очередь результат сегодняшней интернет-практики. Большинство веб-сайтов используют обратные прокси-серверы для приема запросов от ваших веб-браузеров, а затем перенаправляют их на серверы приложений в фоновом режиме.

  • IIS Express / IIS / nginx / Apache - обратные прокси-серверы
  • Kestrel / NodeJS / Tomcat и т. Д. Являются серверами приложений

В другом ответе уже была ссылка на документацию Microsoft, так что вы можете посмотреть.

Microsoft изначально разработала HttpPlatformHandler, чтобы сделать IIS достаточно хорошим обратным прокси-сервером для Java / Python и так далее, поэтому планировали использовать его для ASP.NET Core. Проблемы начали появляться во время разработки, поэтому позже Microsoft создала модуль ASP.NET Core специально для ASP.NET Core. Это поддержка ASP.NET в версии 4 IIS.

Начиная с ASP.NET Core 2.2, модуль ASP.NET Core для IIS (версия 2) может размещать среду .NET Core внутри рабочего процесса IIS (w3wp.exe), что очень похоже на ASP.NET. 2.x / 4.x. Этот режим называется «IIS in-process hosting». Это можно рассматривать как поддержку ASP.NET в IIS версии 5.

Ну, довольно длинный, но я надеюсь, что собрал все необходимые части, и вам понравится это читать.

Из документов ms по адресу: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel - кроссплатформенный веб-сервер для ASP.NET Core на базе libuv, кроссплатформенная библиотека асинхронного ввода-вывода. Пустельга - это паутина сервер, который по умолчанию включен в шаблоны проектов ASP.NET Core.

Вы можете использовать Kestrel отдельно или с обратным прокси-сервером, например IIS, Nginx или Apache. Обратный прокси-сервер получает HTTP-запросы из Интернета и пересылает их в Kestrel после некоторых предварительных обработка.


ОБНОВЛЕНИЕ: .net core 2.1, Kestrel использует управляемые сокеты вместо libuv

Из документов asp.net core 2.1 по адресу: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-конфигурация

С выпуском ASP.NET Core 2.1 транспортным средством Kestrel по умолчанию является больше не на основе Libuv, а на управляемых сокетах.

  1. Несколько приложений на одном порте не поддерживаются в Kestrel.
  2. Проверка подлинности Windows не существует на Kestrel.
  3. Фильтрация запросов намного более полно реализована в IIS.
  4. Отображение типов Mime намного лучше в IIS.
  5. Журналы доступа HTTP не собираются в Kestrel.

2022 WebDevInsider