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 application 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 application 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 que está incluído por padrão em modelos de novo projeto do ASP.NET Core.Kestrel is the web server that's included by default in ASP.NET Core new-project templates.

Você pode usar o Kestrel sozinho ou com um servidor proxy reverso como IIS, Nginx ou Apache.You can use Kestrel 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 — também pode ser usada se o Kestrel é exposto somente a uma rede interna.Either configuration — with or without a reverse proxy server — can also be used if Kestrel is exposed only to an internal network.

Para obter informações sobre quando usar Kestrel com um proxy reverso, consulte Introdução ao Kestrel.For information about when to use Kestrel with a reverse proxy, see Introduction to Kestrel.

Você não pode usar o IIS, Nginx ou Apache sem o Kestrel ou uma implementação de servidor personalizado.You can't use IIS, Nginx, or Apache 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. Cada um entre o IIS, o Nginx e o Apache determina seu próprio processo de inicialização e ambiente; para usá-los diretamente, o ASP.NET Core teria de adaptar-se às necessidades de cada um deles.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. Usar uma implementação do servidor Web, tal como Kestrel, oferece ao ASP.NET Core controle sobre o processo de inicialização e o ambiente.Using a web server implementation such as Kestrel gives ASP.NET Core control over the startup process and environment. Portanto, em vez de tentar adaptar o ASP.NET Core para o IIS, o Nginx ou o Apache, configure esses servidores Web para solicitações de proxy para 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. Esse acordo permite que as classes Program.Main e Startup sejam essencialmente as mesmas, independentemente do local da implantação.This arrangement allows your Program.Main and Startup classes to be essentially the same no matter where you deploy.

IIS com KestrelIIS with Kestrel

Quando você usa 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 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. No processo do IIS, um módulo IIS especial é executado para coordenar a relação de proxy reverso.In the IIS process, a special IIS module runs to coordinate the reverse proxy relationship. Esse é o Módulo do ASP.NET Core.This is the ASP.NET Core Module. 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 ele.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. 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, consulte Hospedar em Linux com o Nginx.For information about 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, consulte Hospedar em Linux com o Apache.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

Se você executar seu aplicativo ASP.NET Core no Windows, o HTTP. sys será uma alternativa ao Kestrel.If you run your ASP.NET Core app on Windows, HTTP.sys is an alternative to Kestrel. Você pode usar o HTTP. sys para cenários em que você expõe seu aplicativo à Internet e você precisa de recursos do HTTP.sys aos quais o Kestrel não dá suporte.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.

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 applications that are exposed only to an internal network.

O HTTP.sys se comunica diretamente com a rede interna

Para cenários de rede interna, o Kestrel é geralmente recomendado para melhor desempenho; mas, em alguns cenários, você talvez queira usar um recurso oferecido apenas pelo 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. Para obter informações sobre os recursos do HTTP.sys, consulte HTTP.sys.For information about HTTP.sys features, see HTTP.sys.

Observações sobre a infraestrutura de servidor do ASP.NET CoreNotes about ASP.NET Core server infrastructure

O IApplicationBuilder disponível no método Configure da classe Startup expõe a propriedade ServerFeatures do tipo IFeatureCollection.The IApplicationBuilder available in the Startup class Configure method exposes the ServerFeatures property of type IFeatureCollection. Kestrel e WebListener expõem apenas um único recurso, IServerAddressesFeature, mas diferentes implementações de servidor podem expor uma funcionalidade adicional.Kestrel and WebListener both expose only a single feature, 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 to at runtime.

Servidores personalizadosCustom servers

Se os servidores internos não atenderem às suas necessidades, você poderá criar uma implementação de servidor personalizado.If the built-in servers don't meet your needs, you can create a custom server implementation. 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. Você pode implementar apenas as interfaces de recurso de que seu aplicativo precisa, embora você precise, no mínimo, dar suporte a IHttpRequestFeature e a IHttpResponseFeature.You're free to implement just the feature interfaces your application needs, though at a minimum you must support IHttpRequestFeature and IHttpResponseFeature.

Próximas etapasNext steps

Para obter mais informações, consulte os seguintes recursos:For more information, see the following resources: