ASP.NET Core의 웹 서버 구현Web server implementations in ASP.NET Core

작성자: Tom Dykstra, Steve Smith, Stephen HalterChris RossBy Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross

ASP.NET Core 응용 프로그램은 In-process HTTP 서버 구현을 통해 실행됩니다.An ASP.NET Core application runs with an in-process HTTP server implementation. 서버 구현은 HTTP 요청을 수신하고 HttpContext를 구성하는 요청 기능 집합으로 응용 프로그램에 표시합니다.The server implementation listens for HTTP requests and surfaces them to the application as sets of request features composed into an HttpContext.

ASP.NET Core는 다음 두 가지 서버 구현을 제공합니다.ASP.NET Core ships two server implementations:

KestrelKestrel

Kestrel은 기본적으로 ASP.NET Core 새 프로젝트 템플릿에 포함된 웹 서버입니다.Kestrel is the web server that is included by default in ASP.NET Core new-project templates.

Kestrel을 단독으로 사용하거나 IIS, Nginx 또는 Apache 같은 역방향 프록시 서버와 함께 사용할 수 있습니다.You can use Kestrel by itself or with a reverse proxy server, such as IIS, Nginx, or Apache. 역방향 프록시 서버는 인터넷에서 HTTP 요청을 수신하고 몇몇 사전 처리 후에 Kestrel에 전달합니다.A reverse proxy server receives HTTP requests from the Internet and forwards them to Kestrel after some preliminary handling.

Kestrel은 역방향 프록시 서버 없이 직접 인터넷과 통신합니다.

Kestrel은 IIS, Nginx 또는 Apache 같은 역방향 프록시 서버를 통해 간접적으로 인터넷과 통신합니다.

Kestrel이 내부 네트워크에만 노출되는 경우 역방향 프록시 서버를 사용하거나 사용하지 않는 구성을 사용할 수도 있습니다.Either configuration — with or without a reverse proxy server — can also be used if Kestrel is exposed only to an internal network.

Kestrel을 역방향 프록시와 함께 사용할 경우에 대한 자세한 내용은 Kestrel 소개를 참조하세요.For information about when to use Kestrel with a reverse proxy, see Introduction to Kestrel.

Kestrel 또는 사용자 지정 서버 구현이 없으면 IIS, Nginx 또는 Apache를 사용할 수 없습니다.You can't use IIS, Nginx, or Apache without Kestrel or a custom server implementation. ASP.NET Core는 플랫폼 간에 일관되게 동작하도록 자체 프로세스로 실행되도록 고안되었습니다.ASP.NET Core was designed to run in its own process so that it can behave consistently across platforms. IIS, Nginx 및 Apache에는 자체 시작 프로세스와 환경이 설명되어 있습니다. 이러한 항목을 직접 사용하려면 ASP.NET Core를 각 항목의 필요에 맞게 조정해야 합니다.IIS, Nginx, and Apache dictate their own startup process and environment; to use them directly, ASP.NET Core would have to adapt to the needs of each one. Kestrel 같은 웹 서버 구현을 사용하면 ASP.NET Core가 시작 프로세스 및 환경을 제어할 수 있습니다.Using a web server implementation such as Kestrel gives ASP.NET Core control over the startup process and environment. 따라서 ASP.NET Core를 IIS, Nginx 또는 Apache에 맞게 조정하는 대신 해당 웹 서버를 Kestrel에 대한 프록시 요청으로 설정하면 됩니다.So rather than trying to adapt ASP.NET Core to IIS, Nginx, or Apache, you just set up those web servers to proxy requests to Kestrel. 이렇게 설정하면 Program.MainStartup 클래스는 배포하는 위치와 관계없이 근본적으로 동일할 수 있습니다.This arrangement allows your Program.Main and Startup classes to be essentially the same no matter where you deploy.

IIS 및 KestrelIIS with Kestrel

IIS 또는 IIS Express를 ASP.NET Core에 대한 역방향 프록시로 사용할 경우, ASP.NET Core 응용 프로그램은 IIS 작업자 프로세스에서 분리된 프로세스로 실행됩니다.When you use IIS or IIS Express as a reverse proxy for ASP.NET Core, the ASP.NET Core application runs in a process separate from the IIS worker process. IIS 프로세스에서는 역방향 프록시 관계를 조정하기 위해 특수 IIS 모듈이 실행됩니다.In the IIS process, a special IIS module runs to coordinate the reverse proxy relationship. 이것은 ASP.NET Core 모듈입니다.This is the ASP.NET Core Module. ASP.NET Core 모듈의 기본 함수는 ASP.NET Core 응용 프로그램을 시작하고, 작동 중단 시 해당 응용 프로그램을 다시 시작하고, 응용 프로그램에 HTTP 트래픽을 전달합니다.The primary functions of the ASP.NET Core Module are to start the ASP.NET Core application, restart it when it crashes, and forward HTTP traffic to it. 자세한 내용은 ASP.NET Core 모듈을 참조하세요.For more information, see ASP.NET Core Module.

Nginx 및 KestrelNginx with Kestrel

Linux에서 Kestrel에 대한 역방향 프록시 서버로 Nginx를 사용하는 방법에 대한 자세한 내용은 Nginx를 사용하여 Linux에서 호스트를 참조하세요.For information about how to use Nginx on Linux as a reverse proxy server for Kestrel, see Host on Linux with Nginx.

Apache 및 KestrelApache with Kestrel

Linux에서 Apache에 대한 역방향 프록시 서버로 Nginx를 사용하는 방법에 대한 자세한 내용은 Apache를 사용하여 Linux에서 호스트를 참조하세요.For information about how to use Apache on Linux as a reverse proxy server for Kestrel, see Host on Linux with Apache.

HTTP.sysHTTP.sys

Windows에서 ASP.NET Core 앱을 실행할 경우 Kestrel 대신 HTTP.sys를 사용할 수 있습니다.If you run your ASP.NET Core app on Windows, HTTP.sys is an alternative to Kestrel. 인터넷에 앱을 노출하고 Kestrel이 지원하지 않는 HTTP.sys 기능을 사용해야 하는 시나리오의 경우 HTTP.sys를 사용할 수 있습니다.You can use HTTP.sys for scenarios where you expose your app to the Internet and you need HTTP.sys features that Kestrel doesn't support.

HTTP.sys는 인터넷과 직접 통신합니다.

HTTP.sys는 내부 네트워크에만 노출되는 응용 프로그램에도 사용할 수 있습니다.HTTP.sys can also be used for applications that are exposed only to an internal network.

HTTP.sys는 내부 네트워크와 직접 통신합니다.

내부 네트워크 시나리오의 경우 최고의 성능을 얻기 위해 일반적으로 Kestrel이 권장되지만 일부 시나리오에서는 HTTP.sys만 제공하는 기능을 사용해야 할 수 있습니다.For internal network scenarios, Kestrel is generally recommended for best performance; but in some scenarios, you might want to use a feature that only HTTP.sys offers. HTTP.sys 기능에 대한 자세한 내용은 HTTP.sys를 참조하세요.For information about HTTP.sys features, see HTTP.sys.

ASP.NET Core 서버 인프라에 대한 참고Notes about ASP.NET Core server infrastructure

Startup 클래스 Configure 메서드에서 사용 가능한 IApplicationBuilderIFeatureCollection 형식의 ServerFeatures 속성을 노출합니다.The IApplicationBuilder available in the Startup class Configure method exposes the ServerFeatures property of type IFeatureCollection. Kestrel 및 WebListener는 둘 다 단일 기능인 IServerAddressesFeature만 노출하지만, 다른 서버 구현이 추가 기능을 노출할 수 있습니다.Kestrel and WebListener both expose only a single feature, IServerAddressesFeature, but different server implementations may expose additional functionality.

IServerAddressesFeature를 사용하여 런타임에 서버 구현이 바인딩된 포트를 확인할 수 있습니다.IServerAddressesFeature can be used to find out which port the server implementation has bound to at runtime.

사용자 지정 서버Custom servers

기본 제공 서버가 필요에 맞지 않으면 사용자 지정 서버 구현을 만들 수 있습니다.If the built-in servers don't meet your needs, you can create a custom server implementation. OWIN(Open Web Interface for .NET) 가이드에서는 Nowin 기반 IServer 구현을 작성하는 방법을 보여 줍니다.The Open Web Interface for .NET (OWIN) guide demonstrates how to write a Nowin-based IServer implementation. 응용 프로그램에 필요한 기능 인터페이스만 자유롭게 구현할 수 있습니다. 단, 최소한 IHttpRequestFeatureIHttpResponseFeature를 지원해야 합니다.You're free to implement just the feature interfaces your application needs, though at a minimum you must support IHttpRequestFeature and IHttpResponseFeature.

다음 단계Next steps

자세한 내용은 다음 리소스를 참조하세요.For more information, see the following resources: