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

使用Nginx部署Django应用时媒体文件无法显示求助

解决Django+Nginx部署后图片无法加载的问题

1. 修正Nginx配置中的路径错误

你的Nginx配置里root指令的使用方式有误,导致路径拼接错误。将/media/和/static/的location配置替换为以下内容:

server {
    server_name example.com www.example.com;

    location /static/ {
        alias /home/myusername/myproject/static/;
        expires 30d;
        add_header Cache-Control "public, max-age=2592000";
    }

    location /media/ {
        alias /home/myusername/myproject/media/;
        expires 30d;
        add_header Cache-Control "public, max-age=2592000";
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

原因:root会把location路径追加到指定目录后,比如访问/media/images/test.jpg时,原配置会查找/home/myusername/myproject/media/media/images/test.jpg;而alias会直接将/media/替换为目标目录路径,正确指向/home/myusername/myproject/media/images/test.jpg。

2. 确认Django项目的媒体文件配置

在项目的settings.py中确保以下配置正确:

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 媒体文件配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

# 静态文件配置(生产环境由Nginx处理,需先执行collectstatic)
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

执行静态文件收集命令(生产环境必备):

python manage.py collectstatic

3. 修复目录权限问题

确保Nginx运行用户(通常为www-data)拥有媒体目录的读取权限:

sudo chown -R www-data:www-data /home/myusername/myproject/media/
sudo chmod -R 755 /home/myusername/myproject/media/

4. 验证图片路径和存储

  • 确认上传的图片实际存储在/home/myusername/myproject/media/images/目录下,文件名与Dweet模型中image字段存储的路径一致(例如images/test.jpg)。
  • 模板中src="/media/{{dweet.image}}"会生成/media/images/test.jpg这类URL,结合Nginx的alias配置即可正确加载图片。

修改配置后重启Nginx生效:

sudo systemctl restart nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:50:23