Django+Nginx部署时加载静态文件出现404错误求助
解决Nginx下静态文件与图片404错误的方案
看起来你的Nginx静态资源配置明显没写完,这大概率就是导致CSS和图片加载404的核心问题!咱们一步步排查修复:
1. 补全静态文件的Location配置
你给出的配置里location /static/...是不完整的,必须明确指向Django项目收集静态文件的实际目录。这里分两种写法,注意区别:
- 使用alias:适合直接指定静态文件根目录,末尾的斜杠要加上避免路径拼接错误:
location /static/ { alias /home/django/django_project/static/; }
- 使用root:root的路径是静态目录的上级目录,Nginx会自动把
/static/拼在路径后面:
location /static/ { root /home/django/django_project; }
注意:二选一即可,别混用,否则会导致路径错误!
2. 确保Django已收集静态文件
Django不会自动把各App的静态文件整合到一起,必须手动执行收集命令,把静态文件统一放到你配置的STATIC_ROOT目录下:
python manage.py collectstatic
执行时会提示确认,输入yes即可。完成后检查目标目录是否有所有静态文件(比如CSS、图片等)。
3. 修复目录权限问题
Nginx的运行用户(通常是www-data)需要有读取静态和media目录的权限,否则会因为权限不足返回403或404。执行以下命令修复:
# 给静态目录设置权限 sudo chown -R www-data:www-data /home/django/django_project/static sudo chmod -R 755 /home/django/django_project/static # 给媒体文件目录同样设置权限 sudo chown -R www-data:www-data /home/django/django_project/django_project/media sudo chmod -R 755 /home/django/django_project/django_project/media
4. 验证Nginx配置并重启服务
修改配置后,先测试配置是否合法,避免语法错误导致Nginx无法启动:
sudo nginx -t
如果输出test is successful,就可以重启Nginx生效:
sudo systemctl restart nginx
额外检查:静态资源引用路径
如果还是有部分图片404,检查你的HTML或CSS里的资源路径是否正确。比如应该用绝对路径/static/images/avatar.jpg,而不是相对路径../images/avatar.jpg,否则页面跳转后路径会失效。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

