Implementações de servidor Web em ASP.NET CoreWeb server implementations in ASP.NET Core

Por Tom Dykstra, Steve Smith, Stephen Halter e Chris RossBy Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross

Um aplicativo ASP.NET Core é executado com uma implementação do servidor HTTP em processo.An ASP.NET Core app runs with an in-process HTTP server implementation. A implementação do servidor escuta solicitações HTTP e traz essas solicitações à tona para o aplicativo como conjuntos de recursos de solicitação compostos em um HttpContext.The server implementation listens for HTTP requests and surfaces them to the app as sets of request features composed into an HttpContext.

O ASP.NET Core envia duas implementações de servidor:ASP.NET Core ships two server implementations:

KestrelKestrel

O Kestrel é o servidor Web padrão incluído nos modelos de projeto do ASP.NET Core.Kestrel is the default web server included in ASP.NET Core project templates.

O Kestrel pode ser usado sozinho ou com um servidor proxy reverso como IIS, Nginx ou Apache.Kestrel can be used by itself or with a reverse proxy server, such as IIS, Nginx, or Apache. Um servidor proxy reverso recebe solicitações HTTP da Internet e as encaminha para o Kestrel após algum tratamento preliminar.A reverse proxy server receives HTTP requests from the Internet and forwards them to Kestrel after some preliminary handling.

O Kestrel se comunica diretamente com a Internet, sem um servidor proxy reverso

O Kestrel se comunica indiretamente com a Internet através de um servidor proxy reverso, tal como o IIS, o Nginx ou o Apache

Qualquer configuração —com ou sem um servidor proxy reverso— é uma configuração de hospedagem válida e compatível com o ASP.NET Core 2.0 ou aplicativos posteriores.Either configuration—with or without a reverse proxy server—is a valid and supported hosting configuration for ASP.NET Core 2.0 or later apps. Para obter mais informações, consulte Quando usar Kestrel com um proxy reverso.For more information, see When to use Kestrel with a reverse proxy.

O IIS, o Nginx ou o Apache não podem ser usados sem o Kestrel ou uma implementação de servidor personalizado.IIS, Nginx, and Apache can't be used without Kestrel or a custom server implementation. O ASP.NET Core foi projetado para ser executado em seu próprio processo, de modo que ele pode se comportar de forma consistente entre plataformas.ASP.NET Core was designed to run in its own process so that it can behave consistently across platforms. O IIS, o Nginx e o Apache determinam seu próprio procedimento de inicialização e o ambiente.IIS, Nginx, and Apache dictate their own startup procedure and environment. Para usar essas tecnologias de servidor diretamente, o ASP.NET Core precisaria adaptar-se aos requisitos de cada servidor.To use these server technologies directly, ASP.NET Core would need to adapt to the requirements of each server. Usando uma implementação do servidor Web, tal como Kestrel, o ASP.NET Core tem controle sobre o processo de inicialização e o ambiente quando hospedado em tecnologias de servidor diferentes.Using a web server implementation, such as Kestrel, ASP.NET Core has control over the startup process and environment when hosted on different server technologies.

IIS com KestrelIIS with Kestrel

Ao usas o IIS ou IIS Express como um proxy reverso para o ASP.NET Core, o aplicativo ASP.NET Core é executado em um processo separado do processo de trabalho do IIS.When using IIS or IIS Express as a reverse proxy for ASP.NET Core, the ASP.NET Core app runs in a process separate from the IIS worker process. No processo do IIS, o Módulo do ASP.NET Core coordena a relação do proxy reverso.In the IIS process, the ASP.NET Core Module coordinates the reverse proxy relationship. As funções primárias do módulo do ASP.NET Core são iniciar o aplicativo do ASP.NET Core, reiniciá-lo quando ele falhar e encaminhar o tráfego HTTP para o aplicativo.The primary functions of the ASP.NET Core Module are to start the ASP.NET Core app, restart the app when it crashes, and forward HTTP traffic to the app. Para obter mais informações, consulte Módulo ASP.NET Core.For more information, see ASP.NET Core Module.

Nginx com KestrelNginx with Kestrel

Para obter informações sobre como usar Nginx no Linux como um servidor proxy reverso para Kestrel, veja Hospedar em Linux com o Nginx.For information on how to use Nginx on Linux as a reverse proxy server for Kestrel, see Host on Linux with Nginx.

Apache com KestrelApache with Kestrel

Para obter informações sobre como usar Apache no Linux como um servidor proxy reverso para Kestrel, veja Hospedar em Linux com o Apache.For information on how to use Apache on Linux as a reverse proxy server for Kestrel, see Host on Linux with Apache.

HTTP.sysHTTP.sys

Se os aplicativos ASP.NET Core forem executados no Windows, o HTTP.sys será uma alternativa ao Kestrel.If ASP.NET Core apps are run on Windows, HTTP.sys is an alternative to Kestrel. O Kestrel geralmente é recomendado para melhor desempenho.Kestrel is generally recommended for best performance. O HTTP.sys pode ser usado em cenários em que o aplicativo é exposto à Internet e os recursos necessários são compatíveis com HTTP.sys, mas não com Kestrel.HTTP.sys can be used in scenarios where the app is exposed to the Internet and required features are supported by HTTP.sys but not Kestrel. Para obter informações sobre os recursos do HTTP.sys, veja HTTP.sys.For information on HTTP.sys features, see HTTP.sys.

O HTTP.sys se comunica diretamente com a Internet

O HTTP.sys também pode ser usado para aplicativos que são expostos somente a uma rede interna.HTTP.sys can also be used for apps that are only exposed to an internal network.

O HTTP.sys se comunica diretamente com a rede interna

Infraestrutura de servidor do ASP.NET CoreASP.NET Core server infrastructure

O IApplicationBuilder disponível no método Startup.Configure expõe a propriedade ServerFeatures do tipo IFeatureCollection.The IApplicationBuilder available in the Startup.Configure method exposes the ServerFeatures property of type IFeatureCollection. Kestrel e HTTP.sys (WebListener no ASP.NET Core 1.x) expõem apenas um único recurso cada, IServerAddressesFeature, mas as implementações de servidor diferentes podem expor funcionalidade adicional.Kestrel and HTTP.sys (WebListener in ASP.NET Core 1.x) only expose a single feature each, IServerAddressesFeature, but different server implementations may expose additional functionality.

IServerAddressesFeature pode ser usado para descobrir a qual porta a implementação do servidor se acoplou durante o tempo de execução.IServerAddressesFeature can be used to find out which port the server implementation has bound at runtime.

Servidores personalizadosCustom servers

Se os servidores internos não atenderem aos requisitos do aplicativo, um servidor personalizado poderá ser criado.If the built-in servers don't meet the app's requirements, a custom server implementation can be created. O Guia de OWIN (Open Web Interface para .NET) demonstra como gravar uma implementação de IServer com base em Nowin.The Open Web Interface for .NET (OWIN) guide demonstrates how to write a Nowin-based IServer implementation. Somente as interfaces de recurso que o aplicativo usa exigem implementação. Porém, no mínimo IHttpRequestFeature e IHttpResponseFeature devem ter suporte.Only the feature interfaces that the app uses require implementation, though at a minimum IHttpRequestFeature and IHttpResponseFeature must be supported.

Inicialização do servidorServer startup

Ao usar o Visual Studio, o Visual Studio para Mac ou o Visual Studio Code, o servidor é iniciado quando o aplicativo é iniciado pelo IDE (ambiente de desenvolvimento integrado).When using Visual Studio, Visual Studio for Mac, or Visual Studio Code, the server is launched when the app is started by the Integrated Development Environment (IDE). No Visual Studio no Windows, os perfis de inicialização podem ser usados para iniciar o aplicativo e o servidor com o IIS Express/Módulo do ASP.NET Core ou o console.In Visual Studio on Windows, launch profiles can be used to start the app and server with either IIS Express/ASP.NET Core Module or the console. No Visual Studio Code, o aplicativo e o servidor são iniciados por Omnisharp, que ativa o depurador CoreCLR.In Visual Studio Code, the app and server are started by Omnisharp, which activates the CoreCLR debugger. Usando o Visual Studio para Mac, o aplicativo e o servidor são iniciados pelo depurador de modo reversível Mono.Using Visual Studio for Mac, the app and server are started by the Mono Soft-Mode Debugger.

Ao iniciar um aplicativo com um prompt de comando na pasta do projeto, a execução dotnet inicia o aplicativo e o servidor (somente no Kestrel e no HTTP.sys).When launching an app from a command prompt in the project's folder, dotnet run launches the app and server (Kestrel and HTTP.sys only). A configuração é especificada pela opção -c|--configuration, que é definida como Debug (padrão) ou Release.The configuration is specified by the -c|--configuration option, which is set to either Debug (default) or Release. Se os perfis de inicialização estiverem presentes em um arquivo launchSettings.json, use a opção --launch-profile <NAME> para definir o perfil de inicialização (por exemplo, Development ou Production).If launch profiles are present in a launchSettings.json file, use the --launch-profile <NAME> option to set the launch profile (for example, Development or Production). Para obter mais informações, veja os tópicos execução dotnet e Empacotamento de distribuição do .NET Core.For more information, see the dotnet run and .NET Core distribution packaging topics.

Recursos adicionaisAdditional resources