必须将 CDN URL 添加到 csp 脚本 src

我的站点配置了如下环境变量:


  DISCOURSE_FORCE_HTTPS: true
  DISCOURSE_S3_ACCESS_KEY_ID: 'KEY'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'SECRET'
  DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_ENABLE_S3_UPLOADS: true
  DISCOURSE_ENABLE_S3_INVENTORY: false
  DISCOURSE_S3_BACKUP_BUCKET: 'mybucket/backups'
  DISCOURSE_S3_UPLOAD_BUCKET: 'mybucket'
  DISCOURSE_S3_CDN_URL: 'https://mybuckets3.cdn.literatehosting.com'
  DISCOURSE_S3_REGION: 'us-west-1'
  DISCOURSE_BACKUP_WITH_UPLOADS: 'false'
  DISCOURSE_CDN_URL: 'https://mybucket.cdn.literatehosting.com'

在添加 s3 cdn url 之前一切正常。添加 S3 CDN 后,我的浏览器开始拒绝访问普通(非 S3)CDN 的请求。我将 CDN URL 添加到 SiteSetting.content_security_policy_script_src= 后,问题又解决了。这似乎是一个 bug,对吧?我在更改这些环境变量后只是重启了服务,并没有重新构建。当我更改 CDN 设置时,是否需要执行 rake assets:precompile

嗯,这应该能正常工作。CSP 本应允许 S3 上的特定文件夹和脚本来源的 CDN。

Discourse 发送的 CSP 是什么?这是一个子目录安装吗?

1 个赞

我想我理解了。这个 CSP 是否包含在 rake assets:precompile 生成的静态资源中?(但如果是这样,为什么将其添加到设置中就能解决问题呢?)

恐怕我不太清楚获取该答案的标准方法。

不是子目录安装。这是一个相当标准的安装,不过前面使用了 Traefik 作为反向代理。

使用 curl -I https://discourse.example.com/ 或 Chrome 开发者工具,获取 Content-Security-Policy 响应头的值。

2 个赞