
bug: CSP connect-src blocks Azure Blob Storage endpoints when self-hosted with runtime environment variables
快速结论:这个报错通常发生在自托管 Langfuse 并使用 Azure Blob Storage 作为媒体上传存储时。优先排查方法是在 web/next.config.mjs 的 connect-src 指令中手动添加 https://*.blob.core.windows.net 通配符。
问题场景
用户在 Kubernetes(Helm)或 Docker Compose 环境中自托管 Langfuse 官方 Docker 镜像。通过运行时环境变量 LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT 配置 Azure Blob Storage 端点(例如 https://<account>.blob.core.windows.net)用于媒体上传。从 Web UI 上传数据集附件或媒体文件时,浏览器端触发 Content Security Policy (CSP) 违规。
报错原文
Refused to connect to 'https://azurestorageaccountname.blob.core.windows.net/...' because it violates the following Content Security Policy directive: "connect-src 'self' https://*.langfuse.com https://*.langfuse.dev https://*.ingest.us.sentry.io https://*.sentry.io https://chat.uk.plain.com https://*.amazonaws.com https://prod-uk-services-attachm-attachmentsuploadbucket2-1l2e4906o2asm.s3.eu-west-2.amazonaws.com https://login.microsoftonline.com https://login.microsoft.com https://*.microsoftonline.com https://graph.microsoft.com".
原因分析
在 web/next.config.mjs 中,connect-src 指令是一个静态硬编码字符串,并未因 Azure Blob Storage 支持的加入而更新以包含 Azure 域名通配符。尽管 Issue 标题猜测了构建时 vs 运行时的变量替换问题,但根据仓库维护者的确认,当前代码中并不存在 mediaUploadConnectSrc 变量在构建时读取 LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT;该 CSP 字符串是纯硬编码的,Azure Blob Storage 支持(如 PR #14585)在添加时遗漏了 CSP 更新。
注意:这与 AWS S3 不同——https://*.s3.amazonaws.com 已被列入白名单,但 Azure Blob Storage 没有对应的通配符。因此,修复方式非常简单,不需要涉及构建时与运行时的复杂逻辑。
环境排查
- Langfuse 自托管版本:3.200.0
- 部署方式:Kubernetes (Helm) / Docker Compose
- 使用官方 Docker 镜像
- Azure Blob Storage 账号配置(确保存储端点格式正确)
- 检查
LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT环境变量是否在运行时注入
解决步骤
- 打开 Langfuse 仓库中的
web/next.config.mjs文件(例如在本地副本或镜像源码中查找)。 - 定位
connect-src指令的定义位置(参考仓库提交471e150a中的第25行附近)。 - 在指令末尾添加 Azure Blob Storage 通配符:
https://*.blob.core.windows.net。修改后的connect-src示例(仅展示 Azure 相关部分):connect-src 'self' ...(原有内容)... https://*.blob.core.windows.net - 重新构建 Docker 镜像(或直接修改现有部署的 CSP 头配置)。
- 如果无法修改源码,另一种可优先尝试的方案是:在反向代理层(如 nginx、traefik、ingress)手动覆盖或附加 CSP 头,加入 Azure Blob Storage 域名。
验证方法
部署修复后的镜像或配置后,从浏览器上传一个媒体文件(如数据集附件),打开浏览器开发者工具(F12)的 Console 面板,确认不再出现 Refused to connect CSP 错误。同时上传功能应正常完成。



