When comparing Apache vs Kestrel, the Slant community recommends Apache for most people. In the question“What are the best HTTP servers for .NET applications?” Apache is ranked 2nd while Kestrel is ranked 3rd.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro Free and open source
Pro Powerful
Apache has a lot of features and functionality.
Pro Excellent OS support
Pro Easy solutions for complex configurations
Due to it's maturity, Apache has a lot of features to cover a wide range of situations.
Pro Great documentation
Apache has thorough documentation.
Pro Built to be very fast, and it is
Kestrel is built to be fast.
When tested on Windows Server 2012 against IIS and at a pipeline depth of 16, Kestrel pushed 1,188,521 requests per second compared to IIS' 57,792 requests per second.
You can read the official benchmark here
Pro Cross Platform
Kestrel's initial goal was to find a way to get ASP.NET running on Linux. Developers can deploy their .NET app on either Windows or Linux, and Kestrel can be present on either one.
Pro Integrated with Visual Studio
When you make a new project in VS, the project is automatically configured to work with Kestrel.
Pro Good option for internal servers
Kestrel itself is fast, but lacking in security and general features. This makes running Kestrel on its own a good option for servers that are only going to be accessed internally.
Cons
Con Arcane configuration format
Configuration is as good as the manuals go. As soon as you have to configure it by yourself, it becomes a lot more difficult due to a rather obtuse system of configuration with long and confusing variable names, which has become infamous among web developers.
Con Process Based Request Handling
Each request opens a new process/fork to handle just that request (ver memory inefficient)
Con Extremely inneficient
Opens a new thread for each request. In practice this means that unless you use a proxy (nginx) you can only have a certain number of people on your site at a time, and is extremely inefficient on the server side.
Con Due to security concerns, external use requires a reverse proxy in front of it
Kestrel is fairly new and doesn't yet have the full suite of security features that you might find in a more mature server. It's recommended to run IIS, Nginx, or Apache in front of it set as a reverse proxy to handle incoming connections. The connections are then passed off to Kestrel after preliminary handling. Because of Kestrels young age, it doesn't have a full defense against attacks which includes, but isn't limited to, appropriate timeouts, size limits, and concurrent connection limits.
Con Lacking in features
Kestrel was built to be fast, so the developers had to cut out some of the higher tier features. Kestrel was designed to push requests and that's it, so if you want additional features it's recommended to run a full-fledged web server in front of it.
You can see a full feature list in the specs section of this recommendation.