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

部署在AWS Elastic Beanstalk的Django项目DEBUG=False时博客图片不显示

问题核心

当DEBUG=False时,Django不会自动处理静态文件请求——你在urls.py里用的static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)仅在DEBUG=True时生效,关闭DEBUG后,media文件的访问路由直接失效,所以博客图片加载失败。

解决办法

办法1:让Elastic Beanstalk的Nginx直接处理media请求

  1. 在项目根目录新建.ebextensions文件夹,创建配置文件01_nginx_media.conf
  2. 往文件里写以下内容,让Nginx拦截/media/开头的请求,直接指向项目的media目录:
files:
  "/etc/nginx/conf.d/media.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      location /media/ {
          alias /var/app/current/media/;
          expires 30d;
      }
  1. 若部署后media目录权限有问题,可在同文件夹下加个权限配置文件02_media_permissions.conf:
container_commands:
  01_create_media_dir:
    command: "mkdir -p /var/app/current/media/"
  02_set_permissions:
    command: "chmod -R 755 /var/app/current/media/"
  1. 重新部署应用到Elastic Beanstalk即可。

办法2:把media文件存到AWS S3(更适合生产环境)

如果图片较多或想优化访问速度,建议用S3托管media文件:

  1. 安装依赖包:
pip install django-storages boto3
  1. 在settings.py里添加配置(替换成你的AWS信息):
INSTALLED_APPS += ['storages']

AWS_ACCESS_KEY_ID = '你的AWS访问密钥ID'
AWS_SECRET_ACCESS_KEY = '你的AWS秘密访问密钥'
AWS_STORAGE_BUCKET_NAME = '你的S3存储桶名称'
AWS_S3_REGION_NAME = '存储桶所在区域,比如us-east-1'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com'

# 配置media文件存储到S3
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/media/'
  1. 把已有的media文件手动上传到S3存储桶的media目录,之后用户上传的图片会自动存到S3,访问不受DEBUG模式影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:42:42