Django fails to find static files served by nginx

5,260

Solution 1

First ensure that you have debug disabled in your settings.py

DEBUG = False

Check your path to static files and url (ex.)

`STATIC_URL = '/static/'

STATICFILES_DIRS = { "/home/myproject/static/", }`

Define your static url in nginx (ex):

location /static/ { alias /home/myproject/static/; expires 1d; }

Solution 2

I don't know why you have this in your configuration. It doesn't do anything.

        proxy_set_header X-Forwarded-Host $server_name;

Anyway, you are not passing on the Host header, which is the most likely reason I can think of why your URLs are being mangled.

Try setting that:

        proxy_set_header Host $http_host;

Solution 3

Is not django problem at, but nginx proxy configuration

The problem is quite similar to this one: (I paste link directly as it is an internal link on serverfault, don't want to duplicate answers)

Removing port from nginx redirect

Maybe even adding proxy_redirect off; to the location configuration does the trick.

Share:
5,260

Related videos on Youtube

Simon
Author by

Simon

Developer. Love Node.js, API and JavaScript. Work at OCTO Technology.

Updated on September 18, 2022

Comments

  • Simon
    Simon almost 2 years

    I know this is a really noobish question but I can't find any solution despite finding the problem trivial.

    I have a django application deployed with gunicorn. The static files are served by the nginx server with the following url : myserver.com/static/admin/css/base.css. However, my django application keep looking for the static files at myserver.com:8001/static/admin/css/base.css and is obviously failing (404).

    I don't know how to fix this. Is it a django or an nginx problem ? Here is my nginx configuration file :

    server {
        server_name myserver.com;
    
        access_log off;
    
        location /static/ {
            alias /home/myproject/static/;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8001;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
    }
    

    Thanks for the help !

  • Simon
    Simon about 10 years
    The first line you mentionned is part of the nginx configuration file recommended in the digitalocean tutorial, I just copied/pasted it. What you have suggested didn't change anything. Is it an nginx of django problem ? Should nginx serve the files on port 8001 or should django serve files from myserver.com instead of myserver.com:8001 ?