Strapi配置CSP后仍无法加载DigitalOcean Spaces图片
Strapi 加载DigitalOcean Spaces图片CSP报错修复方案
问题核心是CSP源匹配规则不符合DigitalOcean Spaces的实际资源地址格式,加上部分场景下配置不生效的常见坑,按以下步骤调整即可:
- 修正CSP源匹配规则
你之前配置的https://sgp1.digitaloceanspaces.com仅能匹配区域根域名的资源,但DigitalOcean Spaces的实际文件访问地址为https://<你的Bucket名称>.sgp1.digitaloceanspaces.com/文件路径格式,属于带子域名前缀的地址,原有规则无法覆盖,需要用通配符调整匹配范围。 - 替换security中间件配置
打开./config/middleware.js,找到strapi::security的配置段,替换为以下内容,其余中间件配置保持原有顺序和参数不要改动:
{ name: 'strapi::security', config: { contentSecurityPolicy: { useDefaults: true, directives: { 'connect-src': ["'self'", 'https:', 'http:'], 'img-src': [ "'self'", 'data:', 'blob:', 'dl.airtable.com', 'https://*.sgp1.digitaloceanspaces.com', 'https://*.cdn.digitaloceanspaces.com', ], 'media-src': [ "'self'", 'data:', 'blob:', 'dl.airtable.com', 'https://*.sgp1.digitaloceanspaces.com', 'https://*.cdn.digitaloceanspaces.com', ], 'default-src': ["'self'"], upgradeInsecureRequests: null, }, }, }, }
- 排查配置覆盖问题
如果你是生产环境部署,需要检查./config/env/production/目录下是否存在独立的middleware.js配置文件,如果有必须把上述CSP规则同步到该文件中,否则根目录的配置会被环境专属配置覆盖,导致修改不生效。 - 重启服务生效
Strapi中间件配置修改后不支持热重载,必须完全终止原有Node进程后重新启动服务,启动后用浏览器硬刷新(Windows按Ctrl+Shift+R、Mac按Cmd+Shift+R)清除页面缓存再验证图片加载。
兜底排查:如果调整后仍有报错,直接看浏览器控制台CSP报错信息里标注的被拦截的完整域名,把该域名按格式补充到对应
*-src指令的列表里即可,不要盲目加过宽的通配规则避免引入安全风险。
内容的提问来源于stack exchange,提问作者sarangkkl
相关产品推荐
相关产品推荐

