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

Django/Python Media资源可上传但AWS环境下无法渲染访问问题

问题原因

  1. Django 生产环境默认不提供媒体文件服务:你本地运行时DEBUG = True,urls.py中通过static()方法添加的媒体资源路由会生效;但部署到生产环境后通常会关闭DEBUG模式,此时static()方法添加的路由会自动失效,直接访问媒体资源就会返回404。
  2. 反向代理未配置媒体路径映射:AWS部署环境一般会用Nginx/Apache作为反向代理处理静态资源请求,如果没有在反向代理配置中添加/media/路径指向项目的MEDIA_ROOT目录,请求会直接被反向代理拦截,不会转发到Django服务,也会返回404。
  3. 目录权限不足:如果media目录的权限配置错误,反向代理服务的运行用户没有目录读取权限,也会导致资源无法访问。

解决方法

方案1:配置反向代理处理媒体资源(生产环境推荐)

以最常用的Nginx为例,编辑你的站点配置文件(默认路径为/etc/nginx/sites-available/[你的项目名]),在server块中添加以下配置:

location /media/ {
    alias [替换为你项目MEDIA_ROOT的绝对路径,比如/opt/django_project/media/];
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

location /static/ {
    alias [替换为你项目STATIC_ROOT的绝对路径,比如/opt/django_project/static/];
    expires 30d;
}

配置修改完成后,执行sudo nginx -t检查配置语法是否正确,确认无误后执行sudo systemctl restart nginx重启Nginx生效。

之后给media目录配置正确的权限,允许Nginx读取:

sudo chown -R :www-data [你的MEDIA_ROOT路径]
sudo chmod -R 775 [你的MEDIA_ROOT路径]

方案2:强制Django处理媒体资源(仅用于临时测试,不推荐生产使用)

如果需要临时验证功能,可以修改项目的urls.py,强制添加媒体资源路由,不受DEBUG模式影响:

from django.urls import re_path
from django.views.static import serve

urlpatterns = [
    # 保留你原来的所有路由配置
    re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
    re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
]

内容的提问来源于stack exchange,提问作者Benjamin William Walker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:18:01