Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuration for Django, Apache and Nginx

I've setup my Django application on Apache+mod_wsgi. To serve the static files I'm using Nginx, as suggested on Django's project website. http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/

Apache is running on port 8081 and nginx is on port 80. Now some people have suggested that my configuration is wrong and I should reverse the roles of Apache and Nginx. I'm not sure why that should be. And if indeed my configuration is wrong, why would django website suggest the wrong method?

like image 643
Neo Avatar asked Feb 03 '11 16:02

Neo


1 Answers

The django docs you linked to do not suggest you use apache as a reverse proxy. They simply suggest you use a separate web server, so I'd say the docs are not clear on that subject -- they are not suggesting anything wrong.

My initial answer was assuming you had nginx as a reverse proxy because port 80 is the HTTP port, the one used when a browser attempts to go to a url with no port specified.

There are numerous complete guides to setting up nginx + apache via a quick google search but here is the gist for setting up nginx:

location / {
        # proxy / requests to apache running django on port 8081
        proxy_pass         http://127.0.0.1:8081/;
        proxy_redirect     off;
    } 

location /media/ { 
        # serve static media directly from nginx
        root   /srv/anuva_project/www/;
        expires 30d;
        break;
    }

All you need to do is remove the proxy lines from your apache configuration and add the proxy statements to your nginx.conf instead.

If you really want to serve your site from port 8081, you could potentially have nginx listen on port 8081 and have apache listen on a different port.

The point is, apache sits in some obscure port, only serving requests sent to it from nginx, while static file serving is handled by nginx.

like image 54
Yuji 'Tomita' Tomita Avatar answered Nov 12 '22 07:11

Yuji 'Tomita' Tomita