Kestrel이란 무엇입니까 (vs 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을 사용하고 있는지 물어 봤는데 어떻게해야할지 몰랐습니다!

PC에서 개발하고 Azure에서 호스트 할 때 크로스 플랫폼 요구 사항 need이 없으므로 Kestrel 조차도 혼란 스럽지만 대안이없는 것 같습니다. 가장 간단한 샘플조차 Kestrel을 사용합니다.


이 새로운 기술에 대해 궁금한 점이 있으면 GitHub 페이지에서 해당 프로젝트를 시작하고 Wiki를 살펴보십시오. 이 서버 위키 페이지 에서 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

황조롱이 무엇입니까

완전한 웹 서버입니다. Kestrel 만 사용하여 ASP.NET Core 응용 프로그램을 실행할 수 있습니다.

그러나 웹 사이트를 실행해도 시스템 트레이에 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 대신)이 도입되어 약간 오래된 것입니다. 나는 더 많은 이야기와 관련 제품들과 함께 대안적인 답변을 제시했다.
Lex Li

171

Windows와 IIS 만 사용하더라도 Kestrel이 제공되는 이유를 이해할 수 있도록 몇 가지 이력이있는 대체 답변을 제공하고 싶습니다.

2000 년 이전 ASP.NET 개발 초기에 Microsoft는 ASP.NET WebForms 앱을 호스팅하기 위해 두 가지를 만들었습니다.

  • Cassini는 나중에 Visual Studio에서 ASP.NET 개발 서버가되었습니다. C #으로 작성된 완전 관리 형 웹 서버입니다 HttpListener. 물론 개발 전용이므로 많은 기능이 구현되지 않았습니다. Microsoft가 Cassini의 소스 코드를 공개 할 수있게되면서 코드 기반을 분기하고 더 많은 기능을 추가 한 Cassini 제품군을 시작한 타사가 있습니다.
  • IIS에서 ASP.NET 지원 (개정 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. 이는 IIS 개정 2에서 ASP.NET 지원으로 볼 수 있습니다. 따라서 ASP.NET 앱은 IIS 작업자 프로세스에서 호스팅됩니다 w3wp.exe.

  • IIS 7 이상에 통합 파이프 라인을 도입하려면을 (를) 대체 aspnet_isapi.dll한 추가 변경이 필요 했습니다 webengine4.dll. 이는 IIS 개정 3에서 ASP.NET 지원으로 볼 수 있습니다. ASP.NET과 IIS 파이프 라인이 통합되었습니다.

ASP.NET이 IIS와 훨씬 더 복잡해지고 긴밀하게 통합되어 Cassini가 시대를 보이기 시작했으며 점차 IIS Express (사용자 모드 lite IIS)로 대체되었습니다.

따라서 많은 경우에 사람들이 IIS가 느리다고 비난 할 때 실제로 ASP.NET을 비난해야합니다. ASP.NET이없는 IIS 자체는 매우 빠르고 안정적이며 ASP.NET은 충분한 성능 메트릭을 염두에두고 개발되지 않았습니다 (WebForms는 많은 생산성과 RAD에 중점을두기 때문에).

그런 다음 2014 년 11 월에 ASP.NET 5 (나중에 ASP.NET Core로 이름이 바))가 발표되어 크로스 플랫폼 기술이되었습니다. 분명히 Microsoft는 Windows, macOS 및 Linux를 지원하기위한 새로운 디자인이 필요했습니다. 여기서 IIS 이외의 모든 주요 웹 서버, nginx / Apache (또는 다른 웹 서버)를 고려해야합니다.

나는 많은 사람들이 마이크로 소프트가 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 Core를 위해 ASP.NET Core Module을 만들었습니다. IIS 개정판 4에 대한 ASP.NET 지원입니다.

ASP.NET Core 2.2부터 IIS 용 ASP.NET Core Module (버전 2)은 w3wp.exeASP.NET 2.x / 4.x와 매우 유사한 IIS 작업자 프로세스 ( ) 내에서 .NET Core 환경을 호스팅 할 수 있습니다 . 이 모드를 "IIS 인 프로세스 호스팅"이라고 합니다. IIS 개정판 5에서 ASP.NET 지원으로 간주 될 수 있습니다.

글쎄요, 꽤 길지만, 필요한 부분을 모두 모아서 읽는 것을 즐기시기 바랍니다.


1
좋은 대답입니다. 그러나 IIS에서 kestrel을 사용하는 것이 '오늘의 인터넷 관행의 결과'라고 간단히 말할 수는 없습니다. 리버스 프록시 사용에 대한 많은 근거가 있습니다. 여기에 몇 가지 언급하면 ​​좋을 것입니다.
Nilay Vishwakarma

13
"역 프록시 사용에 대한 많은 근거가있다"는 자체 질문과 답변에 속한다. 일반적으로 사람들은 Google에 문의하여 좋은 자료를 찾을 수 있으므로이 질문에 대한 답을 아직 오래 가지 못했습니다.
Lex Li

12

ms 문서에서 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel은 크로스 플랫폼 비동기 I / O 라이브러리 인 libuv를 기반으로하는 ASP.NET Core 용 크로스 플랫폼 웹 서버입니다. Kestrel은 기본적으로 ASP.NET Core 프로젝트 템플릿에 포함 된 웹 서버입니다.

Kestrel을 단독으로 사용하거나 IIS, Nginx 또는 Apache와 같은 리버스 프록시 서버와 함께 사용할 수 있습니다. 리버스 프록시 서버는 인터넷에서 HTTP 요청을 수신하여 예비 처리 후 Kestrel에 전달합니다.


업데이트 : .net 코어 2.1, Kestrel은 libuv 인 경우 대신 관리 소켓을 사용합니다.

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration의 asp.net 코어 2.1 문서에서

ASP.NET Core 2.1이 릴리스되면서 Kestrel의 기본 전송은 더 이상 Libuv를 기반으로하지 않고 대신 관리 소켓을 기반으로합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.