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

작성자: Tom Dykstra, Chris Ross, Luke LathamBy Tom Dykstra, Chris Ross, and Luke Latham

HTTP.sys는 Windows에서만 실행되는 ASP.NET Core에 대한 웹 서버입니다.HTTP.sys is a web server for ASP.NET Core that only runs on Windows. HTTP.sys는 Kestrel 서버에 대한 대안이며 Kestel이 제공하지 않는 일부 기능을 제공합니다.HTTP.sys is an alternative to Kestrel server and offers some features that Kestrel doesn't provide.

중요

HTTP.sys는 ASP.NET Core 모듈과 호환되지 않으므로 IIS 또는 IIS Express와 함께 사용될 수 없습니다.HTTP.sys isn't compatible with the ASP.NET Core Module and can't be used with IIS or IIS Express.

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

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

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

  • Windows 7 이상Windows 7 or later
  • Windows Server 2008 R2 이상Windows Server 2008 R2 or later

예제 코드 살펴보기 및 다운로드 (다운로드 방법)View or download sample code (how to download)

HTTP.sys를 사용하는 경우When to use HTTP.sys

HTTP.sys는 다음과 같은 배포에 유용합니다.HTTP.sys is useful for deployments where:

  • IIS를 사용하지 않고 인터넷에 서버를 직접 노출해야 하는 경우There's a need to expose the server directly to the Internet without using IIS.

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

  • 내부 배포에는 Windows 인증처럼 Kestrel에서 사용할 수 없는 기능이 필요합니다.An internal deployment requires a feature not available in Kestrel, such as Windows Authentication.

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

HTTP.sys는 많은 유형의 공격으로부터 보호하고 모든 기능을 갖춘 웹 서버의 견고성, 보안 및 확장성을 제공하는 완성도 높은 기술입니다.HTTP.sys is mature technology that protects against many types 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.

HTTP/2 지원HTTP/2 support

다음 기본 요구 사항이 충족되는 경우 ASP.NET Core 앱에 대해HTTP/2가 사용됩니다.HTTP/2 is enabled for ASP.NET Core apps if the following base requirements are met:

HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/2를 보고합니다.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2.

HTTP/2 연결이 설정된 경우 HttpRequest.Protocol에서 HTTP/1.1을 보고합니다.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

HTTP/2는 기본적으로 사용됩니다.HTTP/2 is enabled by default. HTTP/2 연결이 설정되지 않는 경우 연결이 HTTP/1.1로 대체됩니다.If an HTTP/2 connection isn't established, the connection falls back to HTTP/1.1. Windows의 이후 릴리스에서는 HTTP.sys를 사용하여 HTTP/2를 사용하지 않도록 하는 기능을 포함하여 HTTP/2 구성 플래그를 사용할 수 있습니다.In a future release of Windows, HTTP/2 configuration flags will be available, including the ability to disable HTTP/2 with HTTP.sys.

Kerberos를 사용하여 커널 모드 인증Kernel mode authentication with Kerberos

HTTP.sys는 Kerberos 인증 프로토콜을 사용하여 커널 모드 인증에 위임합니다.HTTP.sys delegates to kernel mode authentication with the Kerberos authentication protocol. 사용자 모드 인증은 Kerberos 및 HTTP.sys로 지원되지 않습니다.User mode authentication isn't supported with Kerberos and HTTP.sys. 머신 계정은 Active Directory에서 가져온 Kerberos 토큰/티켓의 암호를 해독하는 데 사용되고 사용자를 인증하는 서버에 클라이언트에 의해 전달되어야 합니다.The machine account must be used to decrypt the Kerberos token/ticket that's obtained from Active Directory and forwarded by the client to the server to authenticate the user. 앱의 사용자가 아닌 호스트에 대해 SPN(서비스 사용자 이름)을 등록합니다.Register the Service Principal Name (SPN) for the host, not the user of the app.

HTTP.sys 사용 방법How to use HTTP.sys

HTTP.sys를 사용하도록 ASP.NET Core 앱 구성Configure the ASP.NET Core app to use HTTP.sys

  1. Microsoft.AspNetCore.App 메타패키지(nuget.org)(ASP.NET Core 2.1이상)를 사용할 경우 프로젝트 파일의 패키지 참조가 필요하지 않습니다.A package reference in the project file isn't required when using the Microsoft.AspNetCore.App metapackage (nuget.org) (ASP.NET Core 2.1 or later). Microsoft.AspNetCore.App 메타패키지를 사용하지 않는 경우 Microsoft.AspNetCore.Server.HttpSys에 패키지 참조를 추가합니다.When not using the Microsoft.AspNetCore.App metapackage, add a package reference to Microsoft.AspNetCore.Server.HttpSys.

  2. 호스트를 빌드할 때 UseHttpSys 확장 메서드를 호출하여 필요한 HttpSysOptions를 지정합니다.Call the UseHttpSys extension method when building the host, specifying any required HttpSysOptions. 다음 예제에서는 옵션을 기본값으로 설정합니다.The following example sets options to their default values:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
   WebHost.CreateDefaultBuilder(args)
       .UseStartup<Startup>()
       .UseHttpSys(options =>
       {
           options.AllowSynchronousIO = false;
           options.Authentication.Schemes = AuthenticationSchemes.None;
           options.Authentication.AllowAnonymous = true;
           options.MaxConnections = null;
           options.MaxRequestBodySize = 30000000;
           options.UrlPrefixes.Add("http://localhost:5000");
       });
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseHttpSys(options =>
        {
            options.AllowSynchronousIO = true;
            options.Authentication.Schemes = AuthenticationSchemes.None;
            options.Authentication.AllowAnonymous = true;
            options.MaxConnections = null;
            options.MaxRequestBodySize = 30000000;
            options.UrlPrefixes.Add("http://localhost:5000");
        });

추가 HTTP.sys 구성은 레지스트리 설정을 통해 처리됩니다.Additional HTTP.sys configuration is handled through registry settings.

HTTP.sys 옵션HTTP.sys options

속성Property 설명Description 기본값Default
AllowSynchronousIOAllowSynchronousIO HttpContext.Request.BodyHttpContext.Response.Body에 대해 동기 입력/출력이 허용되는지 여부를 제어합니다.Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body. false
Authentication.AllowAnonymousAuthentication.AllowAnonymous 익명 요청을 허용합니다.Allow anonymous requests. true
Authentication.SchemesAuthentication.Schemes 허용되는 인증 체계를 지정합니다.Specify the allowed authentication schemes. 수신기를 삭제하기 전에 언제든지 수정할 수 있습니다.May be modified at any time prior to disposing the listener. 값은 AuthenticationSchemes 열거형: Basic, Kerberos, Negotiate, None, NTLM에서 제공됩니다.Values are provided by the AuthenticationSchemes enum: Basic, Kerberos, Negotiate, None, and NTLM. None
EnableResponseCachingEnableResponseCaching 적합한 헤더가 있는 응답에 대해 커널 모드 캐싱을 시도합니다.Attempt kernel-mode caching for responses with eligible headers. 응답에 Set-Cookie, Vary 또는 Pragma 헤더가 포함될 수 없습니다.The response may not include Set-Cookie, Vary, or Pragma headers. publicshared-max-age 또는 max-age 값인 Cache-Control 헤더나 Expires 헤더가 포함되어야 합니다.It must include a Cache-Control header that's public and either a shared-max-age or max-age value, or an Expires header. true
MaxAccepts 최대 동시 승인 수입니다.The maximum number of concurrent accepts. 5 × Environment.
ProcessorCount
5 × Environment.
ProcessorCount
MaxConnections 허용되는 최대 동시 연결 수입니다.The maximum number of concurrent connections to accept. 무한의 경우 -1을 사용합니다.Use -1 for infinite. 레지스트리의 시스템 수준 설정을 사용하려면 null을 사용합니다.Use null to use the registry's machine-wide setting. null
(제한 없음)(unlimited)
MaxRequestBodySize MaxRequestBodySize 섹션을 참조하세요.See the MaxRequestBodySize section. 30000000바이트30000000 bytes
(~28.6MB)(~28.6 MB)
RequestQueueLimit 큐에 대기할 수 있는 최대 요청 수입니다.The maximum number of requests that can be queued. 10001000
ThrowWriteExceptions 클라이언트 연결 해제로 인해 실패한 응답 본문 쓰기가 예외를 throw하거나 정상적으로 완료되어야 하는지 여부를 나타납니다.Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally. false
(정상적으로 완료)(complete normally)
Timeouts 레지스트리에 구성될 수도 있는 HTTP.sys TimeoutManager 구성을 표시합니다.Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. API 링크를 따라 기본값을 포함하여 각 설정에 대해 자세히 알아보세요.Follow the API links to learn more about each setting, including default values:
UrlPrefixes UrlPrefixCollection을 지정하여 HTTP.sys를 등록합니다.Specify the UrlPrefixCollection to register with HTTP.sys. 컬렉션에 접두사를 추가하는 데 사용되는 UrlPrefixCollection.Add가 가장 유용합니다.The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. 이러한 API는 수신기를 삭제하기 전에 언제든지 수정할 수 있습니다.These may be modified at any time prior to disposing the listener.
속성Property 설명Description 기본값Default
AllowSynchronousIOAllowSynchronousIO HttpContext.Request.BodyHttpContext.Response.Body에 대해 동기 입력/출력이 허용되는지 여부를 제어합니다.Control whether synchronous input/output is allowed for the HttpContext.Request.Body and HttpContext.Response.Body. true
Authentication.AllowAnonymousAuthentication.AllowAnonymous 익명 요청을 허용합니다.Allow anonymous requests. true
Authentication.SchemesAuthentication.Schemes 허용되는 인증 체계를 지정합니다.Specify the allowed authentication schemes. 수신기를 삭제하기 전에 언제든지 수정할 수 있습니다.May be modified at any time prior to disposing the listener. 값은 AuthenticationSchemes 열거형: Basic, Kerberos, Negotiate, None, NTLM에서 제공됩니다.Values are provided by the AuthenticationSchemes enum: Basic, Kerberos, Negotiate, None, and NTLM. None
EnableResponseCachingEnableResponseCaching 적합한 헤더가 있는 응답에 대해 커널 모드 캐싱을 시도합니다.Attempt kernel-mode caching for responses with eligible headers. 응답에 Set-Cookie, Vary 또는 Pragma 헤더가 포함될 수 없습니다.The response may not include Set-Cookie, Vary, or Pragma headers. publicshared-max-age 또는 max-age 값인 Cache-Control 헤더나 Expires 헤더가 포함되어야 합니다.It must include a Cache-Control header that's public and either a shared-max-age or max-age value, or an Expires header. true
MaxAccepts 최대 동시 승인 수입니다.The maximum number of concurrent accepts. 5 × Environment.
ProcessorCount
5 × Environment.
ProcessorCount
MaxConnections 허용되는 최대 동시 연결 수입니다.The maximum number of concurrent connections to accept. 무한의 경우 -1을 사용합니다.Use -1 for infinite. 레지스트리의 시스템 수준 설정을 사용하려면 null을 사용합니다.Use null to use the registry's machine-wide setting. null
(제한 없음)(unlimited)
MaxRequestBodySize MaxRequestBodySize 섹션을 참조하세요.See the MaxRequestBodySize section. 30000000바이트30000000 bytes
(~28.6MB)(~28.6 MB)
RequestQueueLimit 큐에 대기할 수 있는 최대 요청 수입니다.The maximum number of requests that can be queued. 10001000
ThrowWriteExceptions 클라이언트 연결 해제로 인해 실패한 응답 본문 쓰기가 예외를 throw하거나 정상적으로 완료되어야 하는지 여부를 나타납니다.Indicate if response body writes that fail due to client disconnects should throw exceptions or complete normally. false
(정상적으로 완료)(complete normally)
Timeouts 레지스트리에 구성될 수도 있는 HTTP.sys TimeoutManager 구성을 표시합니다.Expose the HTTP.sys TimeoutManager configuration, which may also be configured in the registry. API 링크를 따라 기본값을 포함하여 각 설정에 대해 자세히 알아보세요.Follow the API links to learn more about each setting, including default values:
UrlPrefixes UrlPrefixCollection을 지정하여 HTTP.sys를 등록합니다.Specify the UrlPrefixCollection to register with HTTP.sys. 컬렉션에 접두사를 추가하는 데 사용되는 UrlPrefixCollection.Add가 가장 유용합니다.The most useful is UrlPrefixCollection.Add, which is used to add a prefix to the collection. 이러한 API는 수신기를 삭제하기 전에 언제든지 수정할 수 있습니다.These may be modified at any time prior to disposing the listener.

MaxRequestBodySizeMaxRequestBodySize

요청 본문에 대해 허용되는 최대 크기(바이트)입니다.The maximum allowed size of any request body in bytes. null로 설정하면 최대 요청 본문 크기는 무제한입니다.When set to null, the maximum request body size is unlimited. 항상 무제한인 업그레이드된 연결에는 이 제한이 영향을 미치지 않습니다.This limit has no effect on upgraded connections, which are always unlimited.

단일 IActionResult에 대해 ASP.NET Core MVC 앱에서 제한을 재정의할 때는 작업 메서드에서 RequestSizeLimitAttribute 특성을 사용하는 방법이 좋습니다.The recommended method to override the limit in an ASP.NET Core MVC app for a single IActionResult is to use the RequestSizeLimitAttribute attribute on an action method:

[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()

앱에서 요청을 읽기 시작한 후 요청에 대한 제한을 구성하려고 하면 예외가 throw됩니다.An exception is thrown if the app attempts to configure the limit on a request after the app has started reading the request. IsReadOnly 속성을 사용하여 MaxRequestBodySize 속성이 제한을 구성하기에 너무 늦은, 읽기 전용 상태인지를 나타낼 수 있습니다.An IsReadOnly property can be used to indicate if the MaxRequestBodySize property is in a read-only state, meaning it's too late to configure the limit.

앱에서 요청별로 MaxRequestBodySize를 재정의해야 하는 경우 IHttpMaxRequestBodySizeFeature를 사용합니다.If the app should override MaxRequestBodySize per-request, use the IHttpMaxRequestBodySizeFeature:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    ILogger<Startup> logger, IServer server)
{
    app.Use(async (context, next) =>
    {
        context.Features.Get<IHttpMaxRequestBodySizeFeature>()
            .MaxRequestBodySize = 10 * 1024;

        var serverAddressesFeature = 
            app.ServerFeatures.Get<IServerAddressesFeature>();
        var addresses = string.Join(", ", serverAddressesFeature?.Addresses);

        logger.LogInformation($"Addresses: {addresses}");

        await next.Invoke();
    });

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    // Enable HTTPS Redirection Middleware when hosting the app securely.
    //app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseMvc();
}
  1. Visual Studio를 사용하는 경우 앱이 IIS 또는 IIS Express를 실행하도록 구성되지 않았는지 확인합니다.If using Visual Studio, make sure the app 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 app, manually change the selected profile, as shown in the following screen shot:

    콘솔 앱 프로필 선택

Windows Server 구성Configure Windows Server

  1. 앱용으로 열 포트를 결정하고 Windows 방화벽 또는 New-NetFirewallRule PowerShell cmdlet을 통해 방화벽 포트를 열어 HTTP.sys에 도달하는 트래픽을 허용합니다.Determine the ports to open for the app and use Windows Firewall or the New-NetFirewallRule PowerShell cmdlet to open firewall ports to allow traffic to reach HTTP.sys. 다음 명령 및 앱 구성에서는 포트 443이 사용됩니다.In the following commands and app configuration, port 443 is used.

  2. Azure VM에 배포할 경우 네트워크 보안 그룹에서 포트를 엽니다.When deploying to an Azure VM, open the ports in the Network Security Group. 다음 명령 및 앱 구성에서는 포트 443이 사용됩니다.In the following commands and app configuration, port 443 is used.

  3. 필요한 경우 X.509 인증서를 구하여 설치합니다.Obtain and install X.509 certificates, if required.

    Windows에서 New-SelfSignedCertificate PowerShell cmdlet을 사용하여 자체 서명된 인증서를 만듭니다.On Windows, create self-signed certificates using the New-SelfSignedCertificate PowerShell cmdlet. 지원되지 않는 예는 UpdateIISExpressSSLForChrome.ps1을 참조하세요.For an unsupported example, see UpdateIISExpressSSLForChrome.ps1.

    서버의 로컬 머신 > 개인 저장소에 자체 서명 또는 CA 서명 인증서를 설치합니다.Install either self-signed or CA-signed certificates in the server's Local Machine > Personal store.

  4. 앱이 프레임워크 종속 배포인 경우 .NET Core, .NET Framework 또는 둘 다(앱이 NET Framework를 대상으로 하는 .NET Core 앱인 경우)를 설치합니다.If the app is a framework-dependent deployment, install .NET Core, .NET Framework, or both (if the app is a .NET Core app targeting the .NET Framework).

    • .NET Core – 앱에 .NET Core가 필요한 경우 .NET Core 다운로드에서 .NET Core 런타임 설치 관리자를 가져와 실행합니다..NET Core – If the app requires .NET Core, obtain and run the .NET Core Runtime installer from .NET Core Downloads. 서버에 전체 SDK를 설치하지 마세요.Don't install the full SDK on the server.
    • .NET Framework – 앱에 .NET Framework가 필요한 경우 .NET Framework: 설치 가이드를 참조하세요..NET Framework – If the app requires .NET Framework, see the .NET Framework installation guide. 필수 .NET Framework를 설치합니다.Install the required .NET Framework. 최신 .NET Framework의 설치 관리자는 .NET Core 다운로드 페이지에서 사용할 수 있습니다.The installer for the latest .NET Framework is available from the .NET Core Downloads page.

    앱이 자체 포함 배포인 경우 앱의 배포에 런타임이 포함됩니다.If the app is a self-contained deployment, the app includes the runtime in its deployment. 서버에 프레임워크를 설치할 필요가 없습니다.No framework installation is required on the server.

  5. 앱에서 URL 및 포트를 구성합니다.Configure URLs and ports in the app.

    기본적으로 ASP.NET Core는 http://localhost:5000으로 바인딩합니다.By default, ASP.NET Core binds to http://localhost:5000. URL 접두사 및 포트를 구성하려면 다음 옵션을 사용합니다.To configure URL prefixes and ports, options include:

    • UseUrls
    • urls 명령줄 인수urls command-line argument
    • ASPNETCORE_URLS환경 변수ASPNETCORE_URLS environment variable
    • UrlPrefixes

    다음 코드 예제는 포트 443에서 서버의 로컬 IP 주소 10.0.0.4와 함께 UrlPrefixes를 사용하는 방법을 보여 줍니다.The following code example shows how to use UrlPrefixes with the server's local IP address 10.0.0.4 on port 443:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseHttpSys(options =>
            {
                options.UrlPrefixes.Add("https://10.0.0.4:443");
            });
    

    UrlPrefixes의 장점은 형식이 잘못된 접두사에 대해 오류 메시지가 즉시 생성된다는 점입니다.An advantage of UrlPrefixes is that an error message is generated immediately for improperly formatted prefixes.

    UrlPrefixes의 설정은 UseUrls/urls/ASPNETCORE_URLS 설정을 재정의합니다.The settings in UrlPrefixes override UseUrls/urls/ASPNETCORE_URLS settings. 따라서 UseUrls, urlsASPNETCORE_URLS 환경 변수의 장점은 Kestrel과 HTTP.sys 간을 쉽게 전환할 수 있다는 점입니다.Therefore, an advantage of UseUrls, urls, and the ASPNETCORE_URLS environment variable is that it's easier to switch between Kestrel and HTTP.sys.

    HTTP.sys는 HTTP Server API UrlPrefix 문자열 형식을 사용합니다.HTTP.sys uses the HTTP Server API UrlPrefix string formats.

    경고

    최상위 와일드카드 바인딩(http://*:80/http://+:80)을 사용하지 않아야 합니다.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. 최상위 와일드카드 바인딩으로 인해 앱 보안 취약성이 생길 수 있습니다.Top-level wildcard bindings create app security vulnerabilities. 강력한 와일드카드와 약한 와일드카드 모두에 적용됩니다.This applies to both strong and weak wildcards. 와일드카드보다는 명시적 호스트 이름 또는 IP 주소를 사용합니다.Use explicit host names or IP addresses rather than wildcards. 전체 부모 도메인을 제어하는 경우 하위 도메인 와일드카드 바인딩(예: *.mysub.com)은 보안 위험이 아닙니다(취약한 *.com과 반대임).Subdomain wildcard binding (for example, *.mysub.com) isn't a security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). 자세한 내용은 RFC 7230: Section 5.4: Host(RFC 7230: 섹션 5.4: 호스트)를 참조하세요.For more information, see RFC 7230: Section 5.4: Host.

  6. 서버에 URL 접두사를 미리 등록합니다.Preregister URL prefixes on the server.

    HTTP.sys 구성에 대한 기본 제공 도구는 netsh.exe입니다.The built-in tool for configuring HTTP.sys is netsh.exe. netsh.exe는 URL 접두사를 예약하고 X.509 인증서를 할당하는 데 사용됩니다.netsh.exe is used to reserve URL prefixes and assign X.509 certificates. 도구를 사용하려면 관리자 권한이 필요합니다.The tool requires administrator privileges.

    netsh.exe 도구를 사용하여 앱의 URL을 등록합니다.Use the netsh.exe tool to register URLs for the app:

    netsh http add urlacl url=<URL> user=<USER>
    
    • <URL> – 정규화된 URL(Uniform Resource Locator)입니다.<URL> – The fully qualified Uniform Resource Locator (URL). 와일드카드 바인딩을 사용하지 마세요.Don't use a wildcard binding. 유효한 호스트 이름 또는 로컬 IP 주소를 사용합니다.Use a valid hostname or local IP address. ‘URL에는 후행 슬래시가 포함되어야 합니다.’ The URL must include a trailing slash.
    • <USER> – 사용자 또는 사용자-그룹 이름을 지정합니다.<USER> – Specifies the user or user-group name.

    다음 예제에서 서버의 로컬 IP 주소는 10.0.0.4입니다.In the following example, the local IP address of the server is 10.0.0.4:

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

    URL이 등록되면 도구가 URL reservation successfully added로 응답합니다.When a URL is registered, the tool responds with URL reservation successfully added.

    등록된 URL을 삭제하려면 delete urlacl 명령을 사용합니다.To delete a registered URL, use the delete urlacl command:

    netsh http delete urlacl url=<URL>
    
  7. 서버에 X.509 인증서를 등록합니다.Register X.509 certificates on the server.

    netsh.exe 도구를 사용하여 앱의 인증서를 등록합니다.Use the netsh.exe tool to register certificates for the app:

    netsh http add sslcert ipport=<IP>:<PORT> certhash=<THUMBPRINT> appid="{<GUID>}"
    
    • <IP> – 바인딩의 로컬 IP 주소를 지정합니다.<IP> – Specifies the local IP address for the binding. 와일드카드 바인딩을 사용하지 마세요.Don't use a wildcard binding. 유효한 IP 주소를 사용합니다.Use a valid IP address.
    • <PORT> – 바인딩의 포트를 지정합니다.<PORT> – Specifies the port for the binding.
    • <THUMBPRINT> – X.509 인증서 지문입니다.<THUMBPRINT> – The X.509 certificate thumbprint.
    • <GUID> – 정보 제공용 앱을 나타내는 개발자가 생성한 GUID입니다.<GUID> – A developer-generated GUID to represent the app for informational purposes.

    참조용으로 GUID를 패키지 태그로 앱에 저장합니다.For reference purposes, store the GUID in the app as a package tag:

    • Visual Studio에서 다음을 수행합니다.In Visual Studio:
      • 솔루션 탐색기에서 앱을 마우스 오른쪽 단추로 클릭하고 속성을 선택하여 앱의 프로젝트 속성을 엽니다.Open the app's project properties by right-clicking on the app in Solution Explorer and selecting Properties.
      • 패키지 탭을 선택합니다.Select the Package tab.
      • 태그 필드에 직접 만든 GUID를 입력합니다.Enter the GUID that you created in the Tags field.
    • Visual Studio를 사용하지 않는 경우:When not using Visual Studio:
      • 앱의 프로젝트 파일을 엽니다.Open the app's project file.

      • 직접 만든 GUID를 사용하여 <PackageTags> 속성을 새로운 또는 기존 <PropertyGroup>에 추가합니다.Add a <PackageTags> property to a new or existing <PropertyGroup> with the GUID that you created:

        <PropertyGroup>
          <PackageTags>9412ee86-c21b-4eb8-bd89-f650fbf44931</PackageTags>
        </PropertyGroup>
        

    다음 예제에서는In the following example:

    • 서버의 로컬 IP 주소는 10.0.0.4입니다.The local IP address of the server is 10.0.0.4.
    • 온라인 임의 GUID 생성기는 appid 값을 제공합니다.An online random GUID generator provides the appid value.
    netsh http add sslcert 
        ipport=10.0.0.4:443 
        certhash=b66ee04419d4ee37464ab8785ff02449980eae10 
        appid="{9412ee86-c21b-4eb8-bd89-f650fbf44931}"
    

    인증서가 등록되면 도구가 SSL Certificate successfully added로 응답합니다.When a certificate is registered, the tool responds with SSL Certificate successfully added.

    인증서 등록을 삭제하려면 delete sslcert 명령을 사용합니다.To delete a certificate registration, use the delete sslcert command:

    netsh http delete sslcert ipport=<IP>:<PORT>
    

    netsh.exe에 대한 참조 문서입니다.Reference documentation for netsh.exe:

  8. 앱을 실행합니다.Run the app.

    1024보다 큰 포트 번호로 HTTP(HTTPS 아님)를 사용하여 localhost에 바인딩하는 경우에는 앱을 실행하는 데 관리자 권한이 필요하지 않습니다.Administrator privileges aren't required to run the app when binding to localhost using HTTP (not HTTPS) with a port number greater than 1024. 다른 구성(예: 로컬 IP 주소 사용 또는 포트 443에 바인딩)의 경우 관리자 권한으로 앱을 실행합니다.For other configurations (for example, using a local IP address or binding to port 443), run the app with administrator privileges.

    이 앱은 서버의 공용 IP 주소에서 응답합니다.The app responds at the server's public IP address. 이 예제에서는 서버가 104.214.79.47의 공용 IP 주소에 있는 인터넷에서 연결됩니다.In this example, the server is reached from the Internet at its public IP address of 104.214.79.47.

    이 예제에는 개발 인증서가 사용됩니다.A development certificate is used in this example. 브라우저의 신뢰할 수 없는 인증서 경고를 무시한 후 페이지가 안전하게 로드됩니다.The page loads securely after bypassing the browser's untrusted certificate warning.

    로드된 앱의 인덱스 페이지를 보여 주는 브라우저 창

프록시 서버 및 부하 분산 장치 시나리오Proxy server and load balancer scenarios

인터넷 또는 회사 네트워크의 요청과 상호 작용하는 HTTP.sys에서 호스팅하는 앱의 경우, 프록시 서버 및 부하 분산 장치 뒤에서 호스팅할 때 추가 구성이 필요할 수 있습니다.For apps hosted by HTTP.sys that interact with requests from the Internet or a corporate network, additional configuration might be required when hosting behind proxy servers and load balancers. 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

추가 자료Additional resources