bug: CSP connect-src blocks Azure Blob Storage endpoints when self-hosted with runtime environment variables

用户在 Kubernetes(Helm)或 Docker Compose 环境中自托管 Langfuse 官方 Docker 镜像。通过运行时环境变量 LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT 配置 Azure Blob Storage 端点(例如 https://<acc

bug: CSP connect-src blocks Azure Blob Storage endpoints when self-hosted with runtime environment variables

bug: CSP connect-src blocks Azure Blob Storage endpoints when self-hosted with runtime environment variables

快速结论:这个报错通常发生在自托管 Langfuse 并使用 Azure Blob Storage 作为媒体上传存储时。优先排查方法是在 web/next.config.mjsconnect-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 环境变量是否在运行时注入

解决步骤

  1. 打开 Langfuse 仓库中的 web/next.config.mjs 文件(例如在本地副本或镜像源码中查找)。
  2. 定位 connect-src 指令的定义位置(参考仓库提交 471e150a 中的第25行附近)。
  3. 在指令末尾添加 Azure Blob Storage 通配符:https://*.blob.core.windows.net。修改后的 connect-src 示例(仅展示 Azure 相关部分):
    connect-src 'self' ...(原有内容)... https://*.blob.core.windows.net
  4. 重新构建 Docker 镜像(或直接修改现有部署的 CSP 头配置)。
  5. 如果无法修改源码,另一种可优先尝试的方案是:在反向代理层(如 nginx、traefik、ingress)手动覆盖或附加 CSP 头,加入 Azure Blob Storage 域名。

验证方法

部署修复后的镜像或配置后,从浏览器上传一个媒体文件(如数据集附件),打开浏览器开发者工具(F12)的 Console 面板,确认不再出现 Refused to connect CSP 错误。同时上传功能应正常完成。

参考来源

langfuse/langfuse #14613

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10781

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注