问题
Here are my settings :
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'
Here's my nginx configuration:
server {
server_name 77.241.197.95;
access_log off;
location /static/ {
alias /home/django-projects/tshirtnation/staticfiles/;
}
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"';
}
}
I've run python manage.py collectstatic
and it has copied all static files. I run my server with gunicorn_django --bind:my-ip:8001 and everything seems to be working except for static files.
EDIT: I've run
sudo tail /var/log/nginx/error.log
and there seems to be no errors of static files not found :/
回答1:
I encountered the same problem and was able to fix my nginx configuration by removing the trailing /
from the /static/
location.
location /static { # "/static" NOT "/static/"
# ...
}
回答2:
Try adding the ^~
prefix modifier to your static location to skip checking regular expressions:
location ^~ /static/ {
alias /home/django-projects/tshirtnation/staticfiles/;
}
回答3:
In your settings.py, put this:
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder'
)
STATIC_ROOT = "/home/django-projects/tshirtnation/staticfiles/"
STATIC_URL = '/static/'
You don't need this:
STATICFILES_DIRS = ...
回答4:
settings.py:
ALLOWED_HOSTS = ['*']
STATIC_URL = '/static/'
STATIC_ROOT = '/home/calosh/PycharmProjects/Proyecto_AES/static/'
MEDIA_ROOT = '/home/calosh/PycharmProjects/Proyecto_AES/media/'
MEDIA_URL = '/media/'
In the nginx configurations(/etc/nginx/sites-enabled/default)
server {
server_name localhost;
access_log off;
location /static/ {
alias /home/calosh/PycharmProjects/Proyecto_AES/static/;
}
location / {
proxy_pass http://127.0.0.1:8000;
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"';
}
}
Then restart the nginx server:
sudo service nginx restart
And run gunicorn:
gunicorn PFT.wsgi
Serves the application on localhost or the entire local network (on port 80).
http://127.0.0.1/
回答5:
I think browser tries to find your static in:
http://127.0.0.1:8001/static/
While nginx by default work on 80 port.
You need to define 8001 port in nginx config or run django server on 80 port.
回答6:
Check this things
1 Whether the static older is accessible by nginx, I mean the folder permission .
2 Or do this
Replace this:
STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'
with this
STATIC_ROOT = ''
And add this in settings
STATICFILES_DIRS = (
'/home/django-projects/tshirtnation/staticfiles/',
)
Don't forget to reload the nginx server.
Hope this works.
回答7:
Your problem is that the location /
block is always used, even after the location /static/
one, so everything will be proxy_pass
ed.
The solution here is to use some try_files
magic.
server {
server_name 77.241.197.95;
access_log off;
location / {
try_files $uri @django;
}
location /static/ {
alias /home/django-projects/tshirtnation/staticfiles/;
try_files $uri =404;
# here we use =404 because there is no need to pass it to gunicorn.
}
location @djago {
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"';
}
}
回答8:
Mine looks like this, and it worked:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), '..', 'static'),
)
And in the nginx configuration, my location /static/ is above the location / like this,
location /static {
//
}
# Finally, send all non-media requests to the Django server.
location / {
//
}
And one more thing, I don't know if that matters, but I do have a 'listen' in the server{}. I'm not sure if it can help.
回答9:
try this in settings.py:
import os
ROOT_PATH = os.path.dirname(__file__)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(ROOT_PATH,'static/')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
and config file in nginx(or your server setting):
location /static {
alias /home/djangohome/static; # your Django project's static files - amend as required
}
回答10:
Try to remove slash in nginx settings followed by static e.g. It should be "/static" not "/static/", and if your settings were fine then try to reload the server on local machine and try rebooting on remote machine. I faced similar but after rebooting the machine, fixed the issue.
回答11:
Use STATIC_URL with domain. It's important!
来源:https://stackoverflow.com/questions/23226357/django-nginx-static-files-404