LightpacheX httpd 2.7.9 mainline released!

Not really.

The web is over-saturated with technology. For every "genre" of technology that is released, there are multiple, and I mean multiple, different breeds of that tech that are released. The big one that I am going to talk about today is one that many people tend not to think about because it's very basic and a very big part of our web ecosystem.

Today, I'm going to talk about the superhero of our web ecosystem, the HTTP Server Daemon. The HTTPd is a gigantic part of our web and cloud ecosystem. It serves our requests, works hand-in-hand with application frameworks / application runners such as uWSGI, Passenger, PHP-FPM, and so on. The worst parts about having to manage HTTP servers are a) their configuration files, and b) the fact that there are multiple HTTP servers in existence with different feature-sets and different applications.


Let's start with the server configurations. Generally, web servers have stuck to a tradition of having very terrible configuration files. One of the most notable is Apache, whose cryptic and very lengthy configuration tends to confuse most people. Working with Apache's httpd.conf can be almost perfectly described by the following XKCD (just replace xorg.conf with httpd.conf):

xkcd: 963 / X11

Nginx has an okay configuration. It is a tad bit confusing, but otherwise all configuration options are documented very throughly on the nginx website. Nginx configs can get extremely long and extremely hard to read after a while, and semicolons are a syntactical requirement that lead to some parse errors, should they be forgotten. Overall, nginx is a lot easier to get a hang of than Apache.

Cherokee has a lovely web-based config UI that hides all the nastyness away from you. It has many features, but can be a bit clumsy to work with. I can honestly say that thanks to the config UI, I don't think I've ever actually seen a raw cherokee configuration file.

Lighttpd's configuration is somewhat similar to nginx's configuration. Block-style config with left and right brackets ({}) defining big blocks of settings and branching statements.

IIS is just...no. I am not at liberty to discuss IIS configuration because that type of thing is too painful to think about without coffee.


Now, on to the fun part: actually talking about the web servers themselves!

Apache

Apache HTTPd has been the de-facto web server standard since, well, forever. It can be compiled modularly, with different threaded workers (ie., mpm, event, etc..) built as modules and can be changed as one wishes. Apache dynamically loads the required modules on start, spawns n number of workers, and goes off to work. My real beef with dynamic module systems is that there's a certain "slowness" to them. Generally, resolution of symbols, loading of the actual modules themselves, intra-module routing / data flow manipulation, and actually keeping track of the current module set can get slow (and suck up a lot of memory) with a big set of modules.

Nginx

Nginx is a fairly new competitor in the web server stack (and it's relatively new, compared to Apache...). It is extremely lightweight and can run on a raspberry pi. There are no dynamic modules. Any modules you want to use at runtime have to be compiled into the httpd itself, which leads to an extremely fast server system with a slightly inconvenient, but still relatively easy to use build system. Nginx has a lot of awesome features built in to the base server, and the configuration syntax is easy, compared to Apache. Proxying is easy to accomplish, and there are modules available to provide uWSGI support. PHP support is accomplished without a special module, which is fantastic, in my opinion. PHP-FPM can be configured to run as a UNIX socket and nginx can be configured to treat that file as a proxy backend.

Cherokee

Cherokee is similar to Apache. It is modular, has support for a lot of cool features, and is relatively fast. Configuration is super fast and installation is simple. It has dynamic module loading, support for reloading web zones on-the-fly without restarting, and as a extra bonus, it has a gorgeous web interface for configuration.

Lighttpd

Lighttpd is extremely lightweight, very quick, and very reliable. Lighty is typically used on embedded systems like the pfSense OS and it's more than light enough to run on a raspberry pi. Like the rest of the competition, it has a dynamic module loader and can be stripped down to bare-bones for lighter systems.

IIS

Not even going there.


It all just kinda depends on what you're using your HTTP server for. Going to be working on an embedded system? Choose nginx or lighttpd. Need more features than you will ever know what to do with and you have more resources than you know what to do with? Definitely choose apache. Just playing around, trying to learn how to manage systems, but still need a UI for complex configurations? Choose cherokee. Need something for Windows that somehow works (and is surprisingly still supported) despite its history? Choose IIS.

All in all, if I had to choose my preferred servers, I would choose nginx and lighttpd just because of their speed, ability to be extremely lightweight, decent configurations, and flexibility.

Just make the right choice for your infrastructure and make sure it's scalable. :)

Sean Johnson

Software developer, music enthusiast, college student, and cat lover. Currently enthralled by the world of networking, security, and cloud technology.

San Antonio, TX https://blog.maio.me

Subscribe to Land of Weird Things

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!