# Web server implementations in ASP.NET Core

### Kestrel <a href="#kestrel" id="kestrel"></a>

{% hint style="info" %}
Kestrel is the **default** web server included in ASP.NET Core project templates.
{% endhint %}

Use Kestrel:

* By itself as an edge server processing requests directly from a network, including the Internet.

![](https://3408508746-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lis5JLcnSD2vdYdyQ3U%2F-Lk3RadazjbolQuG9aS7%2F-Lk3UM0qS9Up_-SEBMQa%2Fimage.png?alt=media\&token=a7e9d995-ea2c-4fc1-9546-ca615f6344e9)

* With a reverse proxy server, such as Internet Information Services (IIS), Nginx, or Apache.

![](https://3408508746-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lis5JLcnSD2vdYdyQ3U%2F-Lk3RadazjbolQuG9aS7%2F-Lk3UQBav05qH013X6Cn%2Fimage.png?alt=media\&token=59bbd5a3-47d0-485c-9d4a-8a0fef54de93)

### HTTP.sys <a href="#httpsys" id="httpsys"></a>

If ASP.NET Core apps are run on Windows, HTTP.sys is an alternative to Kestrel. Kestrel is generally recommended for best performance. HTTP.sys can be used in scenarios where the app is exposed to the Internet and required capabilities are supported by HTTP.sys but not Kestrel.

![](https://3408508746-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lis5JLcnSD2vdYdyQ3U%2F-Lk3RadazjbolQuG9aS7%2F-Lk3Uu3UZEbKf7y2wsGs%2Fimage.png?alt=media\&token=52081cca-3e5c-4b48-8570-af861432176a)

HTTP.sys can also be used for apps that are only exposed to an internal network.

![](https://3408508746-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lis5JLcnSD2vdYdyQ3U%2F-Lk3RadazjbolQuG9aS7%2F-Lk3UyoXZJeQWJ_MntSe%2Fimage.png?alt=media\&token=a5ca00cb-232d-4435-a978-27a694abbfc8)

### Custom servers <a href="#custom-servers" id="custom-servers"></a>

If the built-in servers don't meet the app's requirements, a custom server implementation can be created. The **Open Web Interface for .NET (OWIN)** guide demonstrates how to write a **Nowin-based IServer** implementation.
