【全网最细・已实测】Dify 调用内网接口报 403/Connection refused 完整踩坑实录 + 终极解决方案

张开发
2026/4/6 21:57:24 15 分钟阅读

分享文章

【全网最细・已实测】Dify 调用内网接口报 403/Connection refused 完整踩坑实录 + 终极解决方案
一、问题场景与诡异现象1. 环境说明部署方式Docker Compose部署 Dify 1.7.1调用方式工作流HTTP 请求节点目标服务内网 Tomcat 接口http://192.168.100.106:90网络状态容器内 curl 能通返回 200/Tomcat 页面2. 典型报错主要报错Squid 403 Access DeniedplaintextThe requested URL could not be retrieved Access Denied.乱操作后报错Connection refusedplaintext[Errno 111] Connection refused3. 最迷惑的地方容器内能通服务正常端口通、防火墙通只有 Dify 页面调用不通二、我踩过的所有无效弯路千万别学1. 盲目加环境变量无效在docker-compose.yml疯狂加代理开关yamlhttp_proxy: https_proxy: HTTP_PROXY: HTTPS_PROXY: NO_PROXY: * DISABLE_SSRF_PROXY: true结论不生效Dify 工作流不受这套环境变量控制。2. 修改宿主机全局代理无效改/etc/profile、/etc/environment、docker 代理配置结论方向完全错误越改越乱。3. 直接删除 ssrf_proxy 容器致命错误bash运行docker-compose rm -f -s -v ssrf_proxy报错从403 → Connection refused真实原因代理容器被删了Dify 还在强制走它直接连代理都找不到。4. 只改模板不看容器内真实配置最坑修改宿主机squid.conf.template然后只down/up结论配置没进容器Squid 依旧用默认规则拦截内网。三、终极真相为什么一直 403我进入容器查看真实运行的 Squid 配置后瞬间破案bash运行docker exec -it docker-ssrf_proxy-1 cat /etc/squid/squid.conf致命根因只有一句话Squid 配置中http_access deny all写在了最前面ini# 系统默认配置前面 http_access deny all # --- 先拒绝所有 # 你后面加的允许规则后面 http_access allow localnet http_access allow all # --- 永远执行不到Squid 规则机制重点按顺序匹配匹配到 deny 直接返回 403后面的 allow 不会生效内网默认被 Squid 安全策略禁止四、真正根因总结建议截图保存Dify 工作流HTTP 节点强制走内置 ssrf_proxySquidSquid默认禁止内网访问Squid 配置顺序错误deny 在前allow 在后修改宿主机模板不会实时同步到容器删除代理容器 → Connection refused不是解决普通环境变量无法绕过 Dify 内置代理五、✅ 终极可落地解决方案两步搞定方案 A标准永久方案推荐1. 恢复 ssrf_proxy 容器千万别删bash运行cd /data/dify-1.7.1/docker docker-compose up -d ssrf_proxy2. 替换宿主机squid.conf.templateini################################## Reverse Proxy To Sandbox ################################ http_port ${REVERSE_PROXY_PORT} accel vhost cache_peer ${SANDBOX_HOST} parent ${SANDBOX_PORT} 0 no-query originserver http_access allow all always_direct allow all acl localnet src 192.168.0.0/16 acl localnet src 172.16.0.0/12 acl localnet src 10.0.0.0/8 client_request_buffer_max_size 100 MB3. 彻底重建容器必须bash运行docker-compose down -v docker-compose up -d方案 B暴力 instant 生效排障用直接覆盖容器内真实配置立即生效不用重启bash运行docker exec -it docker-ssrf_proxy-1 sh -c cat /etc/squid/squid.conf EOF http_access allow all always_direct allow all http_port 8194 accel vhost cache_peer sandbox parent 8194 0 no-query originserver client_request_buffer_max_size 100 MB EOF squid -k reconfigure 六、关键结论记住这 5 条永不踩坑Dify HTTP 节点 ≠ 普通请求默认走 Squid 代理Squid 默认禁止内网必须手动放行Squid 规则顺序allow 在前deny 在后排查必须看容器内配置不要只看宿主机模板不要删除 ssrf_proxy否则直接 Connection refused七、一图流速查plaintextDify 内网接口 403 ├── 99% Squid 配置问题 ├── 不是系统代理问题 ├── 不是环境变量问题 ├── 不是网络不通 ├── 不是服务挂了 ├── 核心deny all 在 allow 前面 └── 解决allow all 前置 重建容器

更多文章