ASP.NET Core에서 WebListener 웹 서버 구현WebListener web server implementation in ASP.NET Core

작성자: Tom DykstraChris RossBy Tom Dykstra and Chris Ross

참고

이 주제는 ASP.NET Core 1.x에만 적용됩니다.This topic applies only to ASP.NET Core 1.x. ASP.NET Core 2.0에서는 WebListener의 이름이 HTTP.sys입니다.In ASP.NET Core 2.0, WebListener is named HTTP.sys.

WebListener는 Windows에서만 실행되는 ASP.NET Core에 대한 웹 서버입니다.WebListener is a web server for ASP.NET Core that runs only on Windows. Http.Sys 커널 모드 드라이버를 기반으로 합니다.It's built on the Http.Sys kernel mode driver. WebListener는 역방향 프록시 서버로 IIS를 사용하지 않고 인터넷에 대한 직접 연결에 사용될 수 있는 Kestrel에 대한 대안입니다.WebListener is an alternative to Kestrel that can be used for direct connection to the Internet without relying on IIS as a reverse proxy server. 사실상 WebListener는 ASP.NET Core 모듈과 호환되지 않으므로 IIS 또는 IIS Express와 함께 사용될 수 없습니다.In fact, WebListener can't be used with IIS or IIS Express, as it isn't compatible with the ASP.NET Core Module.

WebListener는 ASP.NET Core에 대해 개발되었지만 Microsoft.Net.Http.Server NuGet 패키지를 통해 모든 .NET Core 또는 .NET Framework 응용 프로그램에서 직접 사용할 수 있습니다.Although WebListener was developed for ASP.NET Core, it can be used directly in any .NET Core or .NET Framework application via the Microsoft.Net.Http.Server NuGet package.

WebListener는 다음과 같은 기능을 지원합니다.WebListener supports the following features:

  • Windows 인증Windows Authentication
  • 포트 공유Port sharing
  • SNI로 HTTPSHTTPS with SNI
  • TLS를 통한 HTTP/2(Windows 10)HTTP/2 over TLS (Windows 10)
  • 직접 파일 전송Direct file transmission
  • 응답 캐싱Response caching
  • WebSocket(Windows 8)WebSockets (Windows 8)

지원되는 Windows 버전:Supported Windows versions:

  • Windows 7 및 Windows Server 2008 R2 이상Windows 7 and Windows Server 2008 R2 and later

샘플 코드 보기 또는 다운로드(다운로드 방법)View or download sample code (how to download)

WebListener를 사용하는 경우When to use WebListener

WebListener는 IIS를 사용하지 않고 인터넷에 서버를 직접 노출해야 하는 배포에 유용합니다.WebListener is useful for deployments where you need to expose the server directly to the Internet without using IIS.

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

Http.Sys를 기반으로 하기 때문에 WebListener는 공격으로부터 보호하기 위한 역방향 프록시 서버가 필요하지 않습니다.Because it's built on Http.Sys, WebListener doesn't require a reverse proxy server for protection against attacks. Http.Sys는 많은 유형의 공격으로부터 보호하고 모든 기능을 갖춘 웹 서버의 견고성, 보안 및 확장성을 제공하는 완성도 높은 기술입니다.Http.Sys is mature technology that protects against many kinds of attacks and provides the robustness, security, and scalability of a full-featured web server. IIS 자체는 Http.Sys 위에 HTTP 수신기로 실행됩니다.IIS itself runs as an HTTP listener on top of Http.Sys.

WebListener는 Kestrel을 사용하여 가져올 수 없는 제공하는 기능 중 하나가 필요할 때 내부 배포에 대한 적합한 선택이기도 합니다.WebListener is also a good choice for internal deployments when you need one of the features it offers that you can't get by using Kestrel.

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

WebListener 사용 방법How to use WebListener

호스트 OS 및 ASP.NET Core 응용 프로그램에 대한 설치 작업의 개요는 다음과 같습니다.Here's an overview of setup tasks for the host OS and your ASP.NET Core application.

Windows Server 구성Configure Windows Server

  • .NET Core 또는 .NET Framework 4.5.1과 같은 응용 프로그램에 필요한 .NET 버전을 설치합니다.Install the version of .NET that your application requires, such as .NET Core or .NET Framework 4.5.1.

  • WebListener에 대해 바인딩하고 SSL 인증서를 설정하도록 URL 접두사 미리 등록Preregister URL prefixes to bind to WebListener, and set up SSL certificates

    Windows에서 URL 접두사를 미리 등록하지 않는 경우 관리자 권한으로 응용 프로그램을 실행해야 합니다.If you don't preregister URL prefixes in Windows, you have to run your application with administrator privileges. 유일한 예외는 1024보다 큰 포트 번호로 HTTP(HTTPS 아님)를 사용하여 로컬 호스트에 바인딩하는 경우이며 이 경우 관리자 권한이 필요하지 않습니다.The only exception is if you bind to localhost using HTTP (not HTTPS) with a port number greater than 1024; in that case administrator privileges aren't required.

    자세한 내용은 이 문서의 뒷부분에 나오는 접두사 미리 등록 및 SSL 구성 방법을 참조하세요.For details, see How to preregister prefixes and configure SSL later in this article.

  • 방화벽 포트를 열어 WebListener에 도달하는 트래픽을 허용합니다.Open firewall ports to allow traffic to reach WebListener.

    netsh.exe 또는 PowerShell cmdlet을 사용할 수 있습니다.You can use netsh.exe or PowerShell cmdlets.

Http.Sys 레지스트리 설정도 있습니다.There are also Http.Sys registry settings.

ASP.NET Core 응용 프로그램 구성Configure your ASP.NET Core application

  • NuGet 패키지 Microsoft.AspNetCore.Server.WebListener를 설치합니다.Install the NuGet package Microsoft.AspNetCore.Server.WebListener. 종속성으로 Microsoft.Net.Http.Server도 설치합니다.This also installs Microsoft.Net.Http.Server as a dependency.

  • 다음 예제와 같이 필요한 WebListener 옵션설정을 지정하여 Main 메서드에서 WebHostBuilderUseWebListener 확장 메서드를 호출합니다.Call the UseWebListener extension method on WebHostBuilder in your Main method, specifying any WebListener options and settings that you need, as shown in the following example:

    public static void Main(string[] args)
    {
        Console.WriteLine("Running demo with WebListener.");
    
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();
    
        var builder = new WebHostBuilder()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .UseWebListener(options =>
            {
                options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.None;
                options.ListenerSettings.Authentication.AllowAnonymous = true;
            });
    
        var host = builder.Build();
        host.Run();
    }
    
  • 수신 대기하는 URL 및 포트 구성Configure URLs and ports to listen on

    기본적으로 ASP.NET Core는 http://localhost:5000으로 바인딩합니다.By default ASP.NET Core binds to http://localhost:5000. URL 접두사와 포트를 구성하기 위해 UseURLs 확장 메서드, urls 명령줄 인수 또는 ASP.NET Core 구성 시스템을 사용할 수 있습니다.To configure URL prefixes and ports, you can use the UseURLs extension method, the urls command-line argument or the ASP.NET Core configuration system. 자세한 내용은 호스팅을 참조하세요.For more information, see Hosting.

    웹 수신기는 Http.Sys 접두사 문자열 형식을 사용합니다.Web Listener uses the Http.Sys prefix string formats. WebListener와 관련된 접두사 문자열 형식 요구 사항이 없습니다.There are no prefix string format requirements that are specific to WebListener.

    참고

    서버에서 미리 등록한 동일한 접두사 문자열을 UseUrls에 지정해야 합니다.Make sure that you specify the same prefix strings in UseUrls that you preregister on the server.

  • 응용 프로그램은 IIS 또는 IIS Express를 실행하도록 구성되지 않았습니다.Make sure your application isn't configured to run IIS or IIS Express.

    Visual Studio에서 기본 실행 프로필은 IIS Express용입니다.In Visual Studio, the default launch profile is for IIS Express. 콘솔 응용 프로그램으로 프로젝트를 실행하려면 다음 스크린샷에 표시된 것처럼 수동으로 선택한 프로필을 변경해야 합니다.To run the project as a console application you have to manually change the selected profile, as shown in the following screen shot.

    콘솔 앱 프로필 선택

ASP.NET Core 외부에서 WebListener를 사용하는 방법How to use WebListener outside of ASP.NET Core

Http.Sys 레지스트리 설정도 있습니다.There are also Http.Sys registry settings.

ASP.NET Core 외부에서 WebListener 사용을 보여 주는 코드 샘플은 다음과 같습니다.Here's a code sample that demonstrates WebListener use outside of ASP.NET Core:

var settings = new WebListenerSettings();
settings.UrlPrefixes.Add("http://localhost:8080");

using (WebListener listener = new WebListener(settings))
{
    listener.Start();

    while (true)
    {
        var context = await listener.AcceptAsync();
        byte[] bytes = Encoding.ASCII.GetBytes("Hello World: " + DateTime.Now);
        context.Response.ContentLength = bytes.Length;
        context.Response.ContentType = "text/plain";

        await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
        context.Dispose();
    }
}

URL 접두사 미리 등록 및 SSL 구성Preregister URL prefixes and configure SSL

IIS와 WebListener는 기본 Http.Sys 커널 모드 드라이버를 사용하여 요청을 수신하고 초기 처리를 수행합니다.Both IIS and WebListener rely on the underlying Http.Sys kernel mode driver to listen for requests and do initial processing. IIS에서 관리 UI는 모든 항목을 구성하는 상대적으로 쉬운 방법을 제공합니다.In IIS, the management UI gives you a relatively easy way to configure everything. 그러나 WebListener를 사용하는 경우 Http.Sys를 직접 구성해야 합니다.However, if you're using WebListener you need to configure Http.Sys yourself. 작업 수행을 위한 기본 도구는 netsh.exe입니다.The built-in tool for doing that's netsh.exe.

netsh.exe를 사용해야 하는 가장 일반적인 작업은 URL 접두사 예약 및 SSL 인증서 할당입니다.The most common tasks you need to use netsh.exe for are reserving URL prefixes and assigning SSL certificates.

NetSh.exe는 초보자가 사용하기에 편리한 도구가 아닙니다.NetSh.exe isn't an easy tool to use for beginners. 다음 예제에서는 포트 80 및 443에 대해 URL 접두사를 예약하는 데 필요한 최소한의 것을 보여 줍니다.The following example shows the bare minimum needed to reserve URL prefixes for ports 80 and 443:

netsh http add urlacl url=http://+:80/ user=Users
netsh http add urlacl url=https://+:443/ user=Users

다음 예제에서는 SSL 인증서를 할당하는 방법을 보여 줍니다.The following example shows how to assign an SSL certificate:

netsh http add sslcert ipport=0.0.0.0:443 certhash=MyCertHash_Here appid={00000000-0000-0000-0000-000000000000}".

다음은 공식 참조 설명서입니다.Here is the official reference documentation:

다음 리소스는 여러 시나리오에 대한 자세한 지침을 제공합니다.The following resources provide detailed instructions for several scenarios. HttpListener를 참조하는 문서는 모두 Http.Sys를 기반으로 하므로 WebListener에 동일하게 적용됩니다.Articles that refer to HttpListener apply equally to WebListener, as both are based on Http.Sys.

다음은 netsh.exe 명령줄보다 쉽게 사용할 수 있는 몇 가지 타사 도구입니다.Here are some third-party tools that can be easier to use than the netsh.exe command line. 이러한 도구는 Microsoft에서 제공되거나 보증되지 않습니다.These are not provided by or endorsed by Microsoft. netsh.exe 자체는 관리자 권한이 필요하므로 도구는 기본적으로 관리자 권한으로 실행됩니다.The tools run as administrator by default, since netsh.exe itself requires administrator privileges.

  • http.sys 관리자는 SSL 인증서 및 옵션, 접두사 예약 및 인증서 신뢰 목록의 나열 및 구성을 위한 UI를 제공합니다.http.sys Manager provides UI for listing and configuring SSL certificates and options, prefix reservations, and certificate trust lists.
  • HttpConfig를 통해 SSL 인증서와 URL 접두사를 나열하거나 구성할 수 있습니다.HttpConfig lets you list or configure SSL certificates and URL prefixes. UI는 http.sys 관리자보다 성능이 우수하며 몇 가지 추가 구성 옵션을 노출하지만 그렇지 않은 경우 유사한 기능을 제공합니다.The UI is more refined than http.sys Manager and exposes a few more configuration options, but otherwise it provides similar functionality. 새 CTL(인증서 신뢰 목록)을 만들 수 없지만 기존 것을 할당할 수 있습니다.It cannot create a new certificate trust list (CTL), but can assign existing ones.

자체 서명된 SSL 인증서를 생성하기 위해 Microsoft는 명령줄 도구: MakeCert.exe 및 PowerShell cmdlet New-SelfSignedCertificate를 제공합니다.For generating self-signed SSL certificates, Microsoft provides command-line tools: MakeCert.exe and the PowerShell cmdlet New-SelfSignedCertificate. 자체 서명된 SSL 인증서를 쉽게 생성하도록 하는 타사 UI 도구도 있습니다.There are also third-party UI tools that make it easier for you to generate self-signed SSL certificates:

다음 단계Next steps

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