A little more context, just in case this is simply too general: the uses I are thinking about are running Django and serving static content and title-based virtual hosting.
I'm vaguely conscious of the performance/resource tradeoffs between your different servers, but that's another concern.
Does anybody have experience wonderful these to discuss the tradeoffs?
nginx get my election undoubtedly. I have labored with all the for a long time.
lighttpd isn't a choice at this time, it's major memory leak issues which have been outstanding for a long time, measure the level off your list immediately.
the benefits and drawbacks of apache are very well recorded elsewhere, I'll let another person address that.
nginx really is easy to configure, an aspiration for the static content task. I've not run django behind nginx, but I have run 20 different servers with mongrels behind nginx, and it is, great. In comparison to apache, nginx is a smaller amount memory and cpu intensive, combined with quite simple config it is a simple decision in my opinion.
I'd highly suggest you try it out before you decide to sink time into apache. It is possible the python handling is much better in apache, another person can most likely lend their experience.
I run Django on Apache behind Nginx, with Nginx handling the static content. I am pleased with the arrangement, but when you actually value simplicity of configuration over performance, you'd most likely be most joyful using just Apache alone. Can't beat the simplicity setting up one webserver instead of two. (Running Django on just Nginx using FastCGI can be done, but IMO that's harder to configure and fewer well supported you need to by hand start the FCGI processes yourself).
If you are using mod_wsgi in daemon mode and Apache's worker MPM, and you are careful to not bloat Apache with a lot of needless modules, you'll still gain many of the same memory usage benefits just like a frontend Nginx: the Python code bloat is restricted to simply a couple of WSGI daemon processes as well as your Apache worker threads can remain quite slim for serving static content.
I won't discuss apache... it established fact and recorded. I'll discuss nginx versus lighttpd.
The 2nd one (lighttpd) is a lot forefront feature wealthy, simpler to configure and contains a means better documentation. When speaking about deployment of FCGI or SCGI application (the API Django really use) you will find several important point that lighttpd has:
- It offers support of breeding FCGI and SCGI application by itself, meaning it may fork and keep it in check for you personally if you would like. (for scgi breeding use lighttpd >= 1.4.20). If this involves nginx you must manage you fastcgi/scgi application by yourself -- make use of your own startup scripts.
- It offers support of both TCP/IP electrical sockets and Unix domain electrical sockets for methods. (AFAIK nginx and apache doesn't provide support of unix domain electrical sockets for SCGI).
- It offers native support of CGI
PATH_INFOvariable. In nginx you need to perform a silly workarounds using regular expressions to supply
PATH_INFOthat's not supported.
- nginx doesn't support CGI breeding, and therefore for those who have an easy task to achieve that can be simply completed with CGI, it's impossible for nginx to deal with it.
- Configuration of FCGI for lighttpd a means simpler -- about 4-5 lines.
So... Nginx is definitely nice web server, however it is not my first choice.
That's my little knowledge about FCGI/SCGI development using various servers.
You might like to take a look at Cherokee, if easy configuration and performance are the goals. Its user friendly than lighttpd so far as configuration, about or even more efficient than nginex as well as hooks for many Apache compatibility (simple to port rewrites, etc).
I lately moved the majority of my lighttpd installations to Cherokee with positive results. I am even utilizing it like a front-end load balancer, both for http and mysql. Its really a well crafted, very versatile and very friendly server.