当前位置: 首页 > news >正文

电子商务网站用户协议营销型网站建设申请域名时公司类型的域名后缀一般是

电子商务网站用户协议,营销型网站建设申请域名时公司类型的域名后缀一般是,东莞粤保保安公司,wordpress主题打不开问题背景 Google Gemini模型可纯免费使用#xff0c;且性能也相当不错#xff0c;一般个人使用或研究足够。但在在国内访问#xff0c;需设置代理。在Docker部署Dify时#xff0c;虽然按官方文档介绍设置代理环境变量#xff0c;但实测发现并不生效。我们通过研究试验解决…问题背景 Google Gemini模型可纯免费使用且性能也相当不错一般个人使用或研究足够。但在在国内访问需设置代理。在Docker部署Dify时虽然按官方文档介绍设置代理环境变量但实测发现并不生效。我们通过研究试验解决了这个问题并探索了可配置化的按需走代理的方法。 说明本文主要内容不是介绍dify本地部署的内容可参见Dify官方部署指南。如看官有兴趣小子可以写一个专门文章。 根因分析 先说结论 Dify中访问Gemini模型使用了Google的generativeai Python SDK底层通过gRPC进行通信它要求代理相关的环境变量必须使用小写形式大写形式不生效。 详细分析过程 Dify官方文档说明 Dify的官方文档中提到可以通过设置环境变量在.env.example和.env文件中来配置代理但没有特别说明大小写问题。文档中通常使用的是大写形式的环境变量如HTTP_PROXY和HTTPS_PROXY。 HTTP_PROXYHTTP 代理地址用于解决国内无法访问 OpenAI、HuggingFace 的问题。注意若代理部署在宿主机 (例如 http://127.0.0.1:7890)此处代理地址应当和接入本地模型时一样使用 Docker 容器内部的宿主机地址例如 http://192.168.1.100:7890 或 http://172.17.0.1:7890。HTTPS_PROXYHTTPS 代理地址用于解决国内无法访问 OpenAI、HuggingFace 的问题。同上。Gemini模型插件实现 Dify的Gemini模型插件使用了Google的generativeai Python SDK。 底层通信机制 Google的generativeai SDK底层使用gRPC进行通信。根据gRPC官方文档它支持以下几个代理相关的环境变量 grpc_proxy, https_proxy, http_proxy The URI of the proxy to use for HTTP CONNECT support. These variables are checked in order, and the first one that has a value is used. no_grpc_proxy, no_proxy A comma separated list of hostnames to connect to without using a proxy even if a proxy is set. These variables are checked in order, and the first one that has a value is used.问题确认 对比Dify文档中说明的变量是大写形式如HTTP_PROXY而gRPC文档中是小写形式如http_proxy。通过实验确认只有小写形式的环境变量对Gemini模型生效。 版本差异 对于Dify 0.15.x版本尚未引入插件概念的版本Gemini模型的源代码位于主仓库中但代理环境变量的要求相同。 解决方案 同时设置大小写环境变量 最直接的解决方法是同时设置大小写两套环境变量确保各种组件都能正确识别代理设置。 如果在Docker容器中设置了全局代理环境变量所有HTTP请求都会走代理这可能会导致不必要的性能开销。 虽然可能通过no_proxyNO_PROXY配置但黑名单域名多起来就比较麻烦。 也可以让http proxy server那边配置也不是所有的proxy server都能进行配置。 我们看到dify本身是有一个ssrf_proxy的容器服务是使用squid支持的。至于为何dify添加了这个组件一句话为了安全参见官方介绍。 我们借用这个服务更优雅地实现按需代理。因为squid是一个非常经典的代理服务器它支持代理链proxy chain和域名白名单配置。 实现步骤 确保已有可用的HTTP代理服务器相信看官都会有如果没有小子也提供不了 在dify/docker/.env中配置环境变量 变量名没有使用官方指定因为原来处理逻辑比较绕可以简化另外域名变量是为了使用白名单而不是黑名单。为何分开主机和端口配置这个是为了适配squid(ssrf_proxy)后续说明。 # public http proxy server used in ssrf_proxy service(squid), change for your ip/port HTTP_PROXY_SERVER_HOST 192.168.0.1 HTTP_PROXY_SERVER_PORT 3128 # domains through public http proxy, space separate(if include subdomains, domain wildcard must be begin with comma) DOMAINS_BY_PROXY .googleapis.com .google.com google.dev .openai.com .anthropic.com .github.com .githubusercontent.com .githubassets.com .youtube.com .duckduckgo.com .huggingface.co .dify.ai 修改dify/docker/ssrf_proxy/squid.conf.template 找到以下行40多行的位置 # cache_dir ufs /var/spool/squid 100 16 256 # upstream proxy, set to your own upstream proxy IP to avoid SSRF attacks # cache_peer 172.1.1.1 parent 3128 0 no-query no-digest no-netdb-exchange default 替换为必须要替换在原来的这个位置因为squid有一序列的规则有兴趣可参见官方文档 # 使用squid的机制实现对指定域名及其子域名走上游代理 cache_peer ${HTTP_PROXY_SERVER_HOST} parent ${HTTP_PROXY_SERVER_PORT} 0 no-query no-digest no-netdb-exchange default acl external_domains dstdomain ${DOMAINS_BY_PROXY} never_direct allow external_domains cache_peer_access ${HTTP_PROXY_SERVER_HOST} allow external_domains cache_peer_access ${HTTP_PROXY_SERVER_HOST} deny all 修改dify/docker/docker-compose-template.yaml 尽量不直接修改docker-compose.yaml但也是可行的看官自己选择。在api、plugin_daemon、sandbox几个服务的environment: 节中增加如下配置 environment:...# setting http proxy using ssrf_proxy serviceHTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128}HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128}# lowercase set again for google grpc and othershttp_proxy: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128}https_proxy: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} 使用工具重新生成docker-compose.yaml cd dify/docker ./generate_docker_compose重建container并重启 cd dify/docker docker compose down docker compose up -d验证配置 在Dify控制台中添加Gemini模型测试连接是否成功。如果配置正确应该能够成功连接到Google的Gemini API服务。可以docker logs docker-ssrf_proxy-1查看日志出现以下日志FIRSTUP_PARENT/说明已经走了上游代理。 1741518209.044 260965 172.19.0.8 TCP_TUNNEL/200 13177 CONNECT generativelanguage.googleapis.com:443 - FIRSTUP_PARENT/192.168.0.1 - Dify的Docker网络架构简要说明 这个图表主要展示了Dify系统中的网络连接情况可能不完全准确供参考重点突出了以下几个方面 用户访问流程用户通过nginx访问系统nginx将请求分发给api和web服务 核心服务组件 api核心API服务web前端Web应用worker后台工作进程plugin_daemon插件管理服务sandbox安全的代码执行环境 代理服务 ssrf_proxy基于Squid的代理服务器 #mermaid-svg-X1zF4vHuV7U181s9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-X1zF4vHuV7U181s9 .error-icon{fill:#552222;}#mermaid-svg-X1zF4vHuV7U181s9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-X1zF4vHuV7U181s9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-X1zF4vHuV7U181s9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-X1zF4vHuV7U181s9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-X1zF4vHuV7U181s9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-X1zF4vHuV7U181s9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-X1zF4vHuV7U181s9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-X1zF4vHuV7U181s9 .marker.cross{stroke:#333333;}#mermaid-svg-X1zF4vHuV7U181s9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-X1zF4vHuV7U181s9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-X1zF4vHuV7U181s9 .cluster-label text{fill:#333;}#mermaid-svg-X1zF4vHuV7U181s9 .cluster-label span{color:#333;}#mermaid-svg-X1zF4vHuV7U181s9 .label text,#mermaid-svg-X1zF4vHuV7U181s9 span{fill:#333;color:#333;}#mermaid-svg-X1zF4vHuV7U181s9 .node rect,#mermaid-svg-X1zF4vHuV7U181s9 .node circle,#mermaid-svg-X1zF4vHuV7U181s9 .node ellipse,#mermaid-svg-X1zF4vHuV7U181s9 .node polygon,#mermaid-svg-X1zF4vHuV7U181s9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-X1zF4vHuV7U181s9 .node .label{text-align:center;}#mermaid-svg-X1zF4vHuV7U181s9 .node.clickable{cursor:pointer;}#mermaid-svg-X1zF4vHuV7U181s9 .arrowheadPath{fill:#333333;}#mermaid-svg-X1zF4vHuV7U181s9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-X1zF4vHuV7U181s9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-X1zF4vHuV7U181s9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-X1zF4vHuV7U181s9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-X1zF4vHuV7U181s9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-X1zF4vHuV7U181s9 .cluster text{fill:#333;}#mermaid-svg-X1zF4vHuV7U181s9 .cluster span{color:#333;}#mermaid-svg-X1zF4vHuV7U181s9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-X1zF4vHuV7U181s9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 默认网络 安全代理网络 nginx web plugin_daemon api sandbox worker ssrf_proxy 用户 外部网络 注意事项 本方案已在Dify 1.0.0版本上验证通过对0.15.x系列版本也适用如果使用SSRF代理方式确保ssrf_proxy容器能够正常访问您的代理服务器对于不同的模型提供商可能需要不同的代理配置请根据实际情况调整国内的供应供应商一般不用配置另外发现dify官方域名dify.ai主机也是在国外有时访问不畅尤其是添加工具或插件查看插件市场时访问缓慢所以可以让它也走代理配置方案参见第3点。 总结 通过正确配置代理环境变量特别是注意使用小写形式的环境变量可以解决在国内环境下Dify使用Gemini模型的网络连接问题。利用Dify内置的SSRF代理组件可以实现更灵活的按需代理配置提高系统整体性能。 参考资料 Dify官方文档gRPC环境变量文档Google Generative AI Python SDK
http://www.hkea.cn/news/14328644/

相关文章:

  • 网站制作(信科网络)做网站赚钱交税
  • 布吉网站建设找哪家公司比较好摄影网站建设的功能有哪些
  • 咖啡网站建设网络搭建教程
  • 山西旅游网站建设从化营销型网站建设
  • 快速构建网站建设电子商务网站的目的
  • 世代网络高端企业网站建设设计功能公司营销宣传文案
  • 做微信公众号必备的网站小程序推广公司
  • 怎样才能创建网站网站 广州
  • 网站盈利了如何建立微网站详细步骤
  • 做暧暧的网站平面设计基础学什么
  • 襄樊建设网站湖南建设人力资源网证书查询
  • 物业公司网站模板淮北矿业集团工程建设公司网站
  • 我想做卖鱼苗网站怎样做迁移wordpress 500
  • 网站建设温江公司建网站流程
  • 亚马逊网站建设与维护方法分析湖北可以做网站方案的公司
  • wordpress是一款强大的新泰网站seo
  • 阿里巴巴做轮播网站国美网站建设的特点
  • 东营市河口区建设局网站深圳网站建设 设计贝尔利
  • 礼品公司网站源码贵阳网站制作工具
  • php做视频网站有哪些软件下载网站网络的可用性
  • 辽宁建设信息网站大型企业网络搭建
  • 任县网站建设公司北海做网站的公司
  • 万网网站空间费网站建设推广哪个好
  • 网站服务公司排名南京网站设计外包
  • 猎聘网网站建设目标响应式建设网站
  • 济南网站建设认可搜点网络能浙江省建设银行网站
  • 在线花钱做网站修改wordpress的权限设置方法
  • 好点子网站建设长沙竞价网站建设价格
  • 如何将百度地图加入网站惠州网站开发公司
  • 如何用个人电脑做网站哪里有做桥梁模型的网站