这是我的设置:
STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), ) STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'
这是我的nginxconfiguration:
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"'; } }
我已经运行了python manage.py collectstatic
,它已经复制了所有的静态文件。 我用gunicorn_django –bind:my-ip:8001运行我的服务器,除了静态文件之外,一切似乎都在工作。
编辑:我跑了
sudo tail /var/log/nginx/error.log
而且似乎没有发现静态文件的错误:/
我遇到了同样的问题,并能够通过从/static/
位置删除尾部/
修复我的nginx配置。
location /static { # "/static" NOT "/static/" # ... }
尝试将^~
前缀修饰符添加到您的静态位置以跳过检查正则表达式:
location ^~ /static/ { alias /home/django-projects/tshirtnation/staticfiles/; }
你的问题是, location /
块总是使用,即使在location /static/
一个,所以一切都会被proxy_pass
编辑。
这里的解决方案是使用一些try_files
魔法。
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"'; } }
在你的settings.py中,把这个:
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder' ) STATIC_ROOT = "/home/django-projects/tshirtnation/staticfiles/" STATIC_URL = '/static/'
你不需要这个:
STATICFILES_DIRS = ...
我认为浏览器试图找到你的静态:
http://127.0.0.1:8001/static/
而nginx默认工作在80端口。
您需要在nginx config中定义8001端口,或者在80端口上运行django服务器。
检查这个东西
1 nginx是否可以访问静态的老版本,我的意思是文件夹权限。
2或者做这个
替换这个:
STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'
有了这个
STATIC_ROOT =''
并添加此设置
STATICFILES_DIRS = ( '/home/django-projects/tshirtnation/staticfiles/', )
不要忘记重新加载nginx服务器。
希望这个作品。
我看起来像这样,它的工作:
STATICFILES_DIRS = ( os.path.join(os.path.dirname(__file__), '..', 'static'), )
而在Nginx的配置中,我的位置/ static /位于/位置之上,
location /static { // } # Finally, send all non-media requests to the Django server. location / { // }
还有一件事,我不知道是否重要,但是我确实在服务器上有一个“监听”。 我不确定它是否有帮助。
在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'),]
和配置文件在Nginx(或您的服务器设置):
location /static { alias /home/djangohome/static; # your Django project's static files - amend as required }
尝试删除nginx设置后跟静态的斜杠例如它应该是“/静态”而不是“/静态/” ,如果您的设置没问题,那么尝试在本地机器上重新加载服务器,并尝试在远程机器上重新启动。 我面临类似的问题,但重启机器后,解决了这个问题。
与域一起使用STATIC_URL。 这一点很重要!