In production, Apache + mod_wsgi or Nginx + mod_wsgi? In production, Apache + mod_wsgi or Nginx + mod_wsgi? python python

In production, Apache + mod_wsgi or Nginx + mod_wsgi?


For nginx/mod_wsgi, ensure you read:

http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html

Because of how nginx is an event driven system underneath, it has behavioural characteristics which are detrimental to blocking applications such as is the case with WSGI based applications. Worse case scenario is that with multiprocess nginx configuration, you can see user requests be blocked even though some nginx worker processes may be idle. Apache/mod_wsgi doesn't have this issue as Apache processes will only accept requests when it has the resources to actually handle the request. Apache/mod_wsgi will thus give more predictable and reliable behaviour.


The author of nginx mod_wsgi explains some differences to Apache mod_wsgi in this mailing list message.


The main difference is that nginx is built to handle large numbers of connections in a much smaller memory space. This makes it very well suited for apps that are doing comet like connections that can have many idle open connections. This also gives it quite a smaller memory foot print.

From a raw performance perspective, nginx is faster, but not so much faster that I would include that as a determining factor.

Apache has the advantage in the area of modules available, and the fact that it is pretty much standard. Any web host you go with will have it installed, and most techs are going to be very familiar with it.

Also, if you use mod_wsgi, it is your wsgi server so you don't even need cherrypy.

Other than that, the best advice I can give is try setting up your app under both and do some benchmarking, since no matter what any one tells you, your mileage may vary.