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

Azure部署的Django应用如何通过Cloudflare R2提供静态文件服务

Django 对接 Cloudflare R2 托管静态/媒体资源配置步骤

你已经完成Boto3和R2的连通验证,剩下的对接直接按下面的步骤配置就行:

  • 安装依赖
    先安装django-storages的S3适配包,已经装过boto3的话不用重复装:
    pip install django-storages[boto3]
  • 注册应用
    打开Django项目的settings.py,把storages加到INSTALLED_APPS列表里:
    INSTALLED_APPS = [
        # 保留你原有所有已注册的app
        'storages',
    ]
    
  • 填写R2连接参数
    还是在settings.py里添加R2的S3兼容配置,所有敏感参数建议从环境变量读取,不要硬编码到代码里:
    AWS_ACCESS_KEY_ID = "你的R2访问密钥ID"
    AWS_SECRET_ACCESS_KEY = "你的R2访问密钥值"
    AWS_STORAGE_BUCKET_NAME = "你的R2存储桶名称"
    AWS_S3_ENDPOINT_URL = "https://<你的R2账户ID>.r2.cloudflarestorage.com"
    # 填你给R2存储桶绑定的公开访问域名,不要带http/https前缀
    AWS_S3_CUSTOM_DOMAIN = "R2公开访问域名,例:static.你的站点域名.com"
    AWS_S3_REGION_NAME = "auto" # R2固定填auto即可
    AWS_DEFAULT_ACL = "public-read" # 给静态资源开公共读权限
    AWS_S3_OBJECT_PARAMETERS = {
        "CacheControl": "max-age=86400", # 静态资源缓存时长,可按需求调整
    }
    AWS_S3_FILE_OVERWRITE = False # 关闭同名文件自动覆盖,避免上传冲突
    
  • 配置存储路由规则
    根据你自己的需求选对应配置就行:
    1. 仅把图片等用户上传的媒体资源放到R2,保留原有WhiteNoise托管应用自带静态文件的方案(推荐,改动最小)
    # 媒体文件存储走R2
    DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
    MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
    # 原有的STATIC_URL、WhiteNoise相关配置全部保留不动
    
    1. 把所有静态资源全量切到R2,替换WhiteNoise
      先把settings.py里WhiteNoise相关的中间件、静态文件存储配置注释掉,再添加下面的配置:
    STATICFILES_STORAGE = "storages.backends.s3boto3.S3StaticStorage"
    STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/"
    DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
    MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
    
  • Cloudflare侧配套配置
    • 打开R2存储桶的公开访问权限,绑定你准备好的自定义域名,开启Cloudflare代理即可享受零出口带宽费
    • 给存储桶配置CORS规则,允许你自己的站点域名访问资源,避免前端加载时出现跨域报错,规则参考:
    [
      {
        "AllowedOrigins": ["https://你的站点域名"],
        "AllowedMethods": ["GET"],
        "AllowedHeaders": ["*"],
        "MaxAgeSeconds": 3000
      }
    ]
    
  • 验证生效
    配置完成后,如果是全量托管静态文件,执行python manage.py collectstatic,命令会自动把所有项目静态文件上传到R2桶的static路径下;如果仅托管媒体资源,后续所有通过Django文件字段上传的资源都会自动同步到R2,模板里调用{{ 文件字段.url }}会自动生成R2的公开访问地址,不需要修改原有业务代码。

注意:如果之前一直用WhiteNoise托管静态资源,建议先切媒体资源到R2跑1-2天确认无异常,再全量切换静态资源,避免出现站点样式、脚本加载失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:51:22