Що таке Kestrel (проти IIS / Express)


158

Що таке веб-сервер Kestrel і як він відноситься до IIS / IIS Express?

Я виходжу з розробки програм на IIS Express та розміщення їх на веб-сервері IIS. З ASP.NET Core у мене залежність Microsoft.AspNetCore.Server.Kestrelі старт .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Але коли я запускаю свій веб-сайт, я все одно отримую значок IIS Express у системному треї. Хтось запитав мене, чи використовую я IIS Express чи Kestrel, і я не знав, що сказати!

У мене немає будь-яких крос-платформних вимог, коли я розробляю комп'ютер і хостинг в Azure, тому я плутаюся, якщо навіть needKestrel, але, схоже, не існує альтернативи - навіть найпростіші зразки використовують Kestrel.


Якщо у вас виникли питання щодо цієї нової технології, почніть на сторінці GitHub, щоб розглянути ці проекти, і подивіться на їхні Вікі. Ви переходите на цю сторінку вікі-сервера для репо ASP.NET.
муляр

11
Звичайно, тоді ви натрапляєте на такі речі This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net. На жаль

Відповіді:


115

Що таке Кестрель

Це повноцінний веб-сервер. Ви можете запустити свою програму ASP.NET Core за допомогою Kestrel.

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

У вашому додатку ASP.NET, ймовірно, у wwwrootкаталозі ви побачите web.config, який містить це:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <handlers>
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>

Це HttpPlatformHandler. По суті, це робиться - це пересилання всіх запитів до Kestrel. IIS Express (і IIS з цього приводу) більше не буде запускати ASP.NET. Натомість вони будуть виконувати функції проксі, які просто передають запити та відповіді від Kestrel. Є ще переваги використання IIS, зокрема, він дає вам конфігурацію безпеки, кешування на рівні ядра тощо.


5
відмінний вступ до того, що саме відбувається під кришками під час використання ядра ASP.Net youtu.be/e2qZvabmSvo
user99513

4
Ця відповідь трохи застаріла завдяки впровадженню основного модуля ASP.NET (замість HttpPlatformHandler). Я запропонував альтернативну відповідь з більшою кількістю оповідань та пов'язаних з ними продуктів.
Лекс Лі

174

Я хотів би запропонувати альтернативну відповідь з деякою історією, щоб ви могли зрозуміти, чому приходить Kestrel, навіть якщо ви використовуєте лише Windows та IIS.

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

  • Пізніше Кассіні став сервером розвитку ASP.NET у Visual Studio. Це повністю керований веб-сервер, написаний на C # на основі HttpListener. Звичайно, оскільки це було лише для розвитку, багато функцій так і не були реалізовані. Оскільки Microsoft зробила вихідний код Кассіні доступним для громадськості, є й треті сторони, які розщедрили кодову базу та додали додаткові функції, що запустило сім'ю Кассіні.
  • Підтримка 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, тому Кассіні почав демонструвати свій вік, і поступово його замінив IIS Express (користувацький режим Lite 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.

Тоді чому ви не можете просто використовувати Kestrel? Чому 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 спеціально для ASP.NET Core. Це підтримка ASP.NET у версії IIS 4.

Починаючи з ASP.NET Core 2.2, основний модуль ASP.NET для IIS (версія 2) може розміщувати середовище .NET Core у робочому процесі IIS ( w3wp.exe), що досить схоже на ASP.NET 2.x / 4.x. Цей режим називається "IIS хостинг в процесі" . Це може розглядатися як підтримка ASP.NET у версії IIS 5.

Ну, досить тривалий, але я сподіваюся, що я складу всі необхідні шматки і вам сподобається читати.


1
Гарна відповідь. Але ви не можете просто сказати, що використання пустушки з IIS є результатом сьогоднішньої практики в Інтернеті. Існує багато обґрунтувань використання зворотного проксі. Було б добре згадати тут декілька.
Нілай Вішвакарма

13
"Існує багато обґрунтувань використання зворотного проксі", що належить до власного питання та відповіді. Зазвичай люди можуть знайти хороші ресурси, попросивши Google, тому я не додав цього до цього вже достатньо довгого відповіді.
Лекс Лі

12

Від MS docs за адресою: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel - це веб-сервер крос-платформи для ASP.NET Core на базі libuv, асинхронної міжсистемної бібліотеки вводу-виводу. Kestrel - веб-сервер, який за замовчуванням включений у шаблони проектів ASP.NET Core.

Ви можете використовувати Kestrel самостійно або з зворотним проксі-сервером, наприклад, IIS, Nginx або Apache. Зворотний проксі-сервер отримує HTTP-запити з Інтернету та передає їх Kestrel після попередньої обробки.


UPDATE: .net core 2.1, Kestrel замість libuv використовує керовані сокети

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

З випуском ASP.NET Core 2.1 транспорт за замовчуванням Kestrel вже не базується на Libuv, а на основі керованих сокетів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.