cover_image

使用代理解决dify国内使用claude模型方案

janoX 三七互娱技术团队
2025年03月12日 10:00


01

背景

图片
图片

随着政策的调整,Dify 在国内无法直接访问 AWS 的 Bedrock 服务及其 Claude 模型。此情况下,Dify 面临一个迫切的问题:如何在不采取迁移数据中心等方式的前提下,确保对 Claude 模型的正常调用。这将影响到 Dify 提供服务的稳定性和用户体验,因此需要寻找切实可行的解决方案。

02

可选方案

图片
图片

在全面分析后,提出以下两个主要方案:

  • Dify 迁移至海外地区

    • 优点通过代理服务器将请求转发至 AWS 服务,速度和响应时间更容易控制。此方式能够保留 Dify 现有架构,使用起来更为灵活。

    • 缺点需要额外配置代理服务以及处理相关的 SSL/TLS 问题。

  • Dify 使用代理模式

    • 优点理论上直接使用 AWS 服务,避免任何网络连接层面的干扰。

    • 缺点由于 Dify 已经集成了其他模型与服务,迁移到海外不仅会增加额外的复杂性,也可能引起整体访问速度的显著下降,影响用户体验。


选择方案

选择方案2

补充原因:选择使用代理模式主要基于以下几点考虑:

  • 影响最小:不影响dify上面其它模型的使用,用户访问dify也会更流畅些。

    实现成本:相较于迁移,配置和维护代理的成本更低,更易于快速实施。

03

方案 2 的实现

图片
图片

代理功能

实现代理功能目前可选的有以下2种

  • 初步考虑使用 Squid 作为正向代理,但Dify未找到适合的配置入口来指定代理地址,因此实际上未能成功实施。

    使用 Nginx 进行反向代理。Nginx 的反向代理具有高性能、灵活性和稳定性,仅需 Dify 更新 hosts 文件以绑定代理 IP 即可实现对 Claude 模型的访问,避免了端用户的复杂配置。


因此最终选择nginx反向代理来解决

使用 Nginx 反向代理设置步骤     

获取 Claude 的访问地址

Claude 模型的访问地址可从 AWS 官方文档中获取,确保使用的是最新的服务地址。这些地址包括:

图片

在实施 Nginx 反向代理时,要特别关注 HTTPS 的访问问题。由于 Claude 的接口为 HTTPS,必须处理 SSL/TLS 相关的问题。

主要涉及以下步骤

  • 使用stream模式,因为我们没有claude的ssl证书,使用http模式无法处理证书加解密

    配置 ssl_preread 模块,在接收 SSL/TLS 请求时读取 SNI 信息,这样能根据域名来实现反向代理到不同的claude endpoint

    upstream 通过变量的方式动态配置,配合resolver 来实现dns动态解析



参考配置如下:

图片

dify 绑定claude域名到代理地址

因为dify是通过docker compose 部署的,因此需要修改docker-compose.yml 

图片

找到api,worker服务的部分,添加hosts配置

图片

重启服务

图片


END


三七互娱技术团队

扫码关注 了解更多

图片


继续滑动看下一个
三七互娱技术团队
向上滑动看下一个