Apache or Nginx to serve Django applications?

Barry Steyn picture Barry Steyn · Feb 6, 2012 · Viewed 25.6k times · Source

I want to deploy a Django web application, and hence I need to choose a web server to serve the Python files.

I should mention that my production site will be on a single server, which will host the database and the web server. As momentum picks, I aim to move the database to dedicated server etc.

Here are my questions:

  1. Should I use one web server or two? The context of this question is that lots of people recommend using NginX to serve static media files and Apache to serve the Python, which beckons the following questions:
    1. Why can't we use just one server. I understand Apache may be a beast at times, therefore I would suspect people to use NginX to serve BOTH static media files and python files.
    2. If using one server, what is better, Apache or NginX. I am experienced in Apache, but I have heard only good things about NginX.
  2. What are the advantages to using FastCGI as opposed to mod_wsgi?

Many thanks in advance

Answer

kalvatn picture kalvatn · Jul 13, 2014

Should I use one web server or two? The context of this question is that lots of people recommend using NginX to serve static media files and Apache to serve the Python, which beckons the following questions: Why can't we use just one server. I understand Apache may be a beast at times, therefore I would suspect people to use NginX to serve BOTH static media files and python files.

If you currently have no other sites that are already configured in one way or another, or you need some specific features that are mutually exclusive between the various servers, I see no reason for using multiple servers. This just adds unnecessary complexity and configuration.

If using one server, what is better, Apache or NginX. I am experienced in Apache, but I have heard only good things about NginX.

As with all "which is better" questions this is usually a matter of preference. And to get a specific answer you probably need to ask more specific questions.

If you already have experience with a specific server and you just want to get up an running quickly, then I would suggest going with what you already know for the time being. You can always switch to another web server later. On the other hand it's a good opportunity to learn about the alternatives.


tl;dr : I would go for what is easier to configure and manage. Personally I would go for a nginx and gunicorn, mainly because it's easy and there are plenty of resources available if you should get stuck.

I wouldn't worry too much about the performance until you actually need to. All staple web servers are tried and tested so it mostly comes down to the requirements of the application and the actual load, which needs monitoring and modeling and testing for fine tuning anyways.

What are the advantages to using FastCGI as opposed to mod_wsgi?

Differences and uses between WSGI, CGI, FastCGI, and mod_python in regards to Python?


articles to read (some old, some new);