You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Digital Ocean部署Django+Nginx时部分静态文件无法加载求助

解决Django部署中部分静态图片无法加载的问题

嘿,我看你在Ubuntu 16.04上用DigitalOcean教程部署Django站点时,遇到了部分静态图片加载失败的问题,结合你给出的日志和配置,咱们一步步来排查解决:

核心问题分析

从Nginx错误日志可以看到,服务器找不到/home/dmckim/myproject/static/images/frac_stack_1.jpg,但你确认文件存在且权限正常。最可能的原因是Django静态文件收集配置缺失,以及Nginx路径指向的逻辑问题。

具体解决步骤

1. 修正Django的settings.py配置

你当前的配置缺少STATIC_ROOT,这是collectstatic命令用来存放所有收集后静态文件的核心目录——没有它的话,静态文件不会被统一整理到Nginx能访问的标准化路径下。更新配置如下:

STATIC_URL = '/static/'
# 添加STATIC_ROOT,指定收集后静态文件的存放目录
STATIC_ROOT = '/home/dmckim/myproject/static_collected/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    # 删掉单独的images目录配置,STATICFILES_DIRS只需要指定静态文件的根目录即可
)

2. 调整Nginx配置,指向正确的静态文件目录

Nginx当前指向的是你项目里的源静态目录,但正确的做法是指向collectstatic收集后的统一目录。这里推荐用alias代替root,避免路径拼接错误:

server {
 listen 80;
 server_name 206.189.161.104;

 location = /favicon.ico { access_log off; log_not_found off; }

 location /static {
     # 用alias直接映射到收集后的静态文件目录
     alias /home/dmckim/myproject/static_collected/;
     # 可选:添加缓存规则,提升静态文件加载速度
     expires 30d;
     add_header Cache-Control "public, max-age=2592000";
 }

 location / {
 include proxy_params;
 proxy_pass http://unix:/home/dmckim/myproject/myproject.sock;
 }
}

小贴士:root和alias的区别:root会把location的路径拼接到根路径后,而alias会直接替换location的路径,用alias处理静态文件路径更不容易出错。

3. 重新收集静态文件

先清空旧的收集目录(如果有的话),再执行收集命令:

# 清空旧目录
rm -rf /home/dmckim/myproject/static_collected/
# 自动收集所有静态文件到STATIC_ROOT
python manage.py collectstatic --noinput

4. 修复权限并重启服务

确保Nginx的运行用户www-data能访问静态文件目录,然后重启服务:

# 设置目录权限
sudo chown -R dmckim:www-data /home/dmckim/myproject/static_collected/
sudo chmod -R 755 /home/dmckim/myproject/static_collected/

# 重启服务
sudo systemctl restart gunicorn
sudo nginx -t && sudo systemctl restart nginx

5. 最后验证

登录服务器,确认/home/dmckim/myproject/static_collected/images/frac_stack_1.jpg存在,然后刷新浏览器(记得清除缓存),应该就能加载之前无法显示的图片了。

额外排查点

  • 检查文件名大小写:Linux系统是大小写敏感的,确认请求的文件名和服务器上的文件名完全一致(比如是不是Frac_Stack_1.jpg而不是小写)。
  • 确认源静态文件存在:确保/home/dmckim/myproject/static/images/frac_stack_1.jpg确实存在,collectstatic只会收集源目录里有的文件。

内容的提问来源于stack exchange,提问作者Dmckim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:48:55