django nginx静态文件404

这是我的设置:

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。 这一点很重要!