Django fails to find static files served by nginx
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.
Related videos on Youtube
Simon
Developer. Love Node.js, API and JavaScript. Work at OCTO Technology.
Updated on September 18, 2022Comments
-
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 atmyserver.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 about 10 yearsThe 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 ?