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

Django项目使用Amazon S3存储静态文件加载时报403错误求助

问题排查与修复方案

  • 修复配置冲突项:你当前配置中同时设置了AWS_S3_USE_SSL = False,但STATIC_URL与AWS_S3_ENDPOINT_URL均使用https协议,会导致AWS请求签名校验失败,直接触发403错误。建议直接删除AWS_S3_USE_SSL和AWS_S3_ENDPOINT_URL两行配置,你已经正确配置了存储桶区域和名称,django-storages会自动生成合法的访问地址,无需手动指定endpoint。
  • 确认存储桶公共访问阻断规则:打开S3控制台对应存储桶的「权限」选项卡,找到「阻止公共访问(存储桶设置)」,需确保4个开关全部处于关闭状态,否则即使配置了公开ACL,请求也会被系统强制拦截返回403。
  • 检查存储桶ACL开关与配置适配:如果你的存储桶设置为「ACL已禁用」,需要将AWS_DEFAULT_ACL = 'public-read'修改为AWS_DEFAULT_ACL = None,完全通过桶策略控制访问权限即可。如果存储桶开启了ACL,保持原有配置即可。
  • 配置正确的桶策略:在存储桶权限页的「桶策略」模块添加如下规则,替换其中的存储桶名称为你的实际桶名:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::你的实际存储桶名称/*"
        }
    ]
}
  • 验证已上传文件的权限:在S3控制台打开任意一个加载失败的静态文件详情页,检查权限配置中是否包含匿名用户的读取权限。如果没有,说明之前上传时权限配置未生效,重新执行python manage.py collectstatic上传文件即可。
  • 排查CORS规则:如果你的站点域名和S3访问域名不一致,需要在存储桶「权限」-「跨源资源共享(CORS)」中添加你的站点域名的允许规则,避免跨域请求被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:30:04