Top 5 open source web servers

3 readers like this
3 readers like this
System statistics with sar and the /proc filesystem

ajmexico. Modified by Jason Baker. CC BY-SA 2.0.

Statistics show us that well over 80% of web applications and websites are powered by open source web servers. In this article, I look at the most popular open source web servers, and briefly review their history, technology, features, and more. I will also provide some tips so you can easily deploy one of the popular web servers yourself.

According to Wikipedia, a web server is "a computer system that processes requests via HTTP, the basic network protocol used to distribute information on the World Wide Web. The term can refer to the entire system, or specifically to the software that accepts and supervises the HTTP requests." In this article, we address the software which specifically processes web requests from end users.

Apache HTTP Server

The Apache HTTP Server—often referred to as httpd, or simply Apache—was first launched in 1995, and celebrated its 20th birthday in February 2015. Apache powers 52% of all websites globally, and is by far the most popular web server.

While Apache httpd is most often seen running on Linux, you can also deploy Apache on OS X and Windows. Apache is, unsurprisingly, licensed under the Apache License version 2. The web server itself uses a modular architecture, in which extra modules can be loaded to extend its features. For example, loading the mod_proxy will allow for a proxy/gateway on your server, and mod_proxy_balancer will enable load balancing for all supported protocols. As of version 2.4, Apache also supports HTTP/2 through a new module, mod_http2.

As the Apache HTTP Server has been the most popular web server since 1996, it "benefits from great documentation and integrated support from other software projects." You can find more information on the Apache Foundation project page.

NGINX

Igor Sysoev began developing NGINX back in 2002, with its first public release in 2004. NGINX was developed as an answer to the so-called C10K problem, which is shorthand for "how do you design a web server which can handle ten thousand concurrent connections?" NGINX is second on a list of open source web servers by usage, running just over 30% of all websites.

NGINX relies on an asynchronous event-driven architecture to help power its goal of handling massive concurrent sessions. It has become a very popular web server among administrators due to its light resource utilization and its ability to scale easily.

NGINX is released under a BSD-like license, and can not only be deployed as web server, but also as proxy server or load-balancer. You can find more information on the NGINX community site.

Apache Tomcat

Apache Tomcat is an open source Java servlet container that functions as a web server. A Java servlet is a Java program that extends the capabilities of a server. Although servlets can respond to any types of requests, they most commonly implement applications hosted on Web servers. Such web servlets are the Java counterpart to other dynamic web content technologies such as PHP and ASP.NET. Tomcat's code base was donated by Sun Microsystems to the Apache Software Foundation in 1999, and became a top-level Apache project in 2005. It currently powers just under 1% of all websites.

Apache Tomcat, released under the Apache License version 2, is typically used to run Java applications. It can, however, be extended with Coyote, to also perform the role of a normal web server that serves local files as HTTP documents. More information can be found on the project website.

Apache Tomcat is often listed among other open source Java application servers. Some examples are JBossWildfly, and Glassfish.

Node.js

Node.js is a server-side JavaScript environment for network applications such as web servers. With a smaller market position, Node.js powers 0.2% of all websites. Node.js was originally written in 2009 by Ryan Dahl. The Node.js project, governed by the Node.js Foundation, is facilitated by the Linux Foundation's Collaborative Projects program.

The difference between Node.js and other popular web servers is that it is primarily a cross-platform runtime environment to build network applications with. Node.js applies an event-driven architecture capable of asynchronous I/O. These design choices optimize throughput and scalability in web applications allowing to run real-time communication and browser games. Node.js also highlights the difference in web development stacks, where Node.js is clearly part of the HTML, CSS, and JavaScript stack, as opposed to Apache or NGINX which are a part of many different software stacks.

Node.js is released under a mix of licenses; more information is available on the project's website.

Lighttpd

Lighttpd—pronounced "lightly"—saw its initial release in March 2003. It currently powers approximately 0.1% of all websites and is distributed under a BSD license.

Lighttpd distinguishes itself with its low memory footprint, small CPU load, and speed optimizations. It uses an event-driven architecture, is optimized for a large number of parallel connections, and supports FastCGI, SCGI, Auth, Output-compression, URL-rewriting and many more features. Lighttpd is a popular web server for the Catalyst and Ruby on Rails web frameworks. Find more information on the project homepage.

Tips

If you are looking to try one of the popular web servers, I can highly recommend downloading a LAMP (Linux, Apache, MySQL, PHP) or LEMP (Linux, NGINX, MySQL, PHP) stack. There are plenty of such stacks available, providing different flavors in for example Apache and PHP versions. They are usually provided as one-click installers, or available in your package/software manager on Linux.

Once you have successfully gone through the installation process, you can start your web server, and try out a Hello World example. It's a great way to start discovering the ins and outs of your web server, and how web servers work more generally.

Summary

This is by no means an exhaustive list of web servers. I have included some of the most popular web servers and looked at their supported technologies. If you are interested in more detail, particularly with the differences of Apache and NGINX, I recommend reading this article on practical considerations for choosing a web server.

And of course, we are always curious what your choice of web server is, for your web development or hosting needs. Let us know in the comments.

Former Opensource.com and Open Organization moderator/ambassador.

12 Comments

Great article Robin. Most of my experience is with Apache. I first started using it on Windows about 1998 or 1999. When I got into using Linux in 2001 I switched my previous install to that OS and have since deployed it many times. I have tried NGINX and lighttpd but never in production.

A number of years ago, while still running apache prefork with mod_php, I looked into nginx and fastcgi. At the same time, I examined moving forward with apache httpd using the event mpm with php-fpm (fastcgi).

In my benchmarks, it was no contest: apache kicked nginx's butt and was far more stable.

All the hype surrounding the performance improvements of nginx seem to be comparing it to prefork apache with mod_php. I have not seen an honest apples to apples benchmark ever. I should have published my findings, but I'm a nobody without even a blog.

Fantastic article. I've had some real fun with Lighttpd. Its so light. WOW Thank you.

Not necessarily an "off-the-shelf" solution, but something worth considering if you are designing some application over HTTP: AWS (Ada Web Server, nothing to do with Amazon... only an unfortunate acronym clash), it is a library (written in Ada) implementing an HTTP server that can be used to implement from a simple "page serving" server to complex HTTP application.

See http://libre.adacore.com/tools/aws/

Good article, Robin. Way to go!
I just would add one 6th webserver to the list: Jetty. Yet being a kind of spin off from Tomcat, it's lightweight and doesn't require much customization. But it's still a great webserver that you can use to prototype, test and even deploy production stage apps.

Hello Hugo.

Thanks for that suggestion. I limited the list to the top 5. It sure looks interesting, with all of its support, and being under the umbrella of the Eclipse Foundation.

In reply to by Hugo Tavares (not verified)

While it's not a production web server, a simplified desktop alternative for developers is http://fenixwebserver.com. Key feature: push-button collaboration via SSH tunneling. Disclaimer: I'm the author. The upcoming version will be the first to include a local certificate authority for localhost SSL support (a key feature for developing mobile web apps using power API's like geolocation).

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.