Django自定义字体本地正常,DigitalOcean生产环境无法加载
问题分析与解决方案
针对你遇到的DigitalOcean Spaces部署Django项目后字体文件403无法加载的问题,以下是几个核心原因及对应解决方法:
1. 字体文件权限未设置为公开可读
其他静态文件正常但字体403,大概率是字体文件的存储权限为私有。DigitalOcean Spaces默认上传的文件权限是私有,需要手动或通过配置改为公开可读:
- 手动修改:在Spaces控制台找到
static/fonts下的字体文件,右键选择“Edit Permissions”,设置为“Public Read”。 - 自动配置:如果使用
django-storages,在settings.py中添加:
确保执行AWS_DEFAULT_ACL = 'public-read'collectstatic时,所有静态文件(包括字体)都会被设置为公开权限。
2. CORS配置存在细节遗漏
即使配置了CORS,若规则未覆盖字体加载的需求,仍会触发403。需检查以下配置项:
- Origin:必须填写你的应用域名(如
https://your-app-domain.com),测试阶段可临时用*,生产环境建议指定具体域名。 - Allowed Methods:需包含
GET, HEAD, OPTIONS(浏览器加载字体前会发送OPTIONS预检请求)。 - Allowed Headers:需允许
Content-Type。 - 修改CORS后,务必用无痕浏览器测试,避免浏览器缓存旧规则。
3. 静态文件收集路径错误
确认collectstatic是否将字体文件上传到了Spaces的正确路径:
- 尝试直接访问字体文件的完整URL(如
https://your-space-endpoint/static/fonts/Canto-Bold.woff2):- 若返回404:说明路径错误,检查
STATIC_ROOT和AWS_STORAGE_BUCKET_NAME配置,确保static/fonts目录正确上传到Spaces根目录下。 - 若返回403:回到权限或CORS配置排查。
- 若返回404:说明路径错误,检查
4. WOFF2文件MIME类型未正确配置
DigitalOcean Spaces默认可能未识别.woff2的MIME类型,导致浏览器拒绝加载。需手动添加MIME规则:
- 在Spaces控制台的“Settings”中找到“MIME Types”,添加新规则:
- 扩展名:
.woff2 - MIME类型:
font/woff2
- 扩展名:
内容的提问来源于stack exchange,提问作者Thomas Doll-Datema
相关产品推荐
相关产品推荐

