Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which webserver to use with Django? (updated for use in 2011)

Tags:

I am asking this question because I am a beginner and I've read almost 90% of articles speaking about Django, but the problem is: Django was made and had problems for deploying, it is python, and python is not PHP! When reading Django tutorials, a beginner is in big problem, because he can find a tutorial "outdated" for example if you take a tutorial made in 2008 you'll see that they speak like the following:

to deploy django, use apache, and dont forget to use another server for static files, for example nginx as a reverse proxy!

But now, I found some articles saying that making a second server is useless because in the past, Django was served using mod_python which uses a lot of resources! So here is my question:

  1. Which one is the best for VPS, Apache or Nginx, using the latest release of course! Please dont say: use lighty or cherokee...
  2. If, for example, the answer was: use Ngnix, then, is it better to use one server or two, as in the past it was better to make two webservers?
  3. When I've checked my brain, I've found that there is only few free space avalaible, so I don't want to learn something else, so do you think a 100% pythonic solution will be ok? CherryPy does it be a perfect solution, mean, CherryPy + Django and basta! no Apache, no Nginx, no more learning than python language!
  4. From what I've read, Django and asynchronous servers are not "good friends", so does really get a good choise to use Nginx?

Updated: added (4) about Django and asynchronous.

like image 656
Abdelouahab Avatar asked Aug 20 '11 17:08

Abdelouahab


People also ask

Which web server is best for Django?

Gunicorn is the recommended HTTP server for use with Django on Heroku (as referenced in the Procfile above). It is a pure-Python HTTP server for WSGI applications that can run multiple Python concurrent processes within a single dyno (see Deploying Python applications with Gunicorn for more information).

Which webserver does Django use?

Django's primary deployment platform is WSGI, the Python standard for web servers and applications.

Does Django need a webserver?

Django, being a web framework, needs a web server in order to operate. And since most web servers don't natively speak Python, we need an interface to make that communication happen. Django currently supports two interfaces: WSGI and ASGI.

Does Django use Apache or nginx?

Most people deploying Django nowadays seem to be using nginx, so, if you aren't interested in learning more about what you should choose, pick up nginx. Apache is also widely used, and it is preferable in some cases. If you have any reason to prefer it, go ahead and use it. If you don't know what to do, choose nginx.


1 Answers

1 - which one is the best for VPS, Apache or Nginx, using the latest release of course! please dont say: use lighty or cherokee...

Either will work fine.

2 - if for example the answer was: use ngnix, then, is it better to use one server or two, as in the past it was better to make two webservers?

The key point that is being made is that Django/Python should not serve your static resources. "Two servers" could be different physical servers, or instances, or virtual servers. Here's an example of configuring nginx to serve static files directly and then pass dynamic requests to Python:

From https://code.djangoproject.com/wiki/DjangoAndNginx:

server {     listen 80;     server_name localhost;     location /site_media  {         root /media/; # Notice this is the /media folder that we create above     }     location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) {         access_log   off;         expires      30d;      }     location / {         # host and port to fastcgi server         fastcgi_pass 127.0.0.1:8080;         fastcgi_param PATH_INFO $fastcgi_script_name;         fastcgi_param REQUEST_METHOD $request_method;         fastcgi_param QUERY_STRING $query_string;         fastcgi_param CONTENT_TYPE $content_type;         fastcgi_param CONTENT_LENGTH $content_length;         fastcgi_pass_header Authorization;         fastcgi_intercept_errors off;         } } 

3 - when i've checked my brain, i've found that there is only few free space aviable, so i dont want to learn something else, so do you think a 100% pythonic solution will be ok? CherryPy does it be a perfect solution, mean, CherryPy + Django and basta! no Apache, no Nginx, no more learning than python language!

IMO, setting up either Apache or nginx is pretty simple and there are lots of resources out there. You don't need to learn very much about them to setup something simple.

like image 108
cope360 Avatar answered Oct 14 '22 05:10

cope360