Dify调用本地API服务报错403?一篇文章帮你彻底排查网络与代理问题
背景最近在Dify平台搭建工作流时需要调用同服务器上的一个本地API服务。本来以为在同一台机器上用localhost或127.0.0.1就能轻松搞定结果却遇到了一连串的网络问题从403 Forbidden到Connection refused再到Temporary failure in name resolution折腾了大半天。今天就把这个完整的排查过程和最终解决方案做个总结。下次再遇到Dify调用本地服务的问题照着这个思路走能少走很多弯路。一、问题现象我的环境是这样的Dify通过docker-compose部署在Linux服务器上本地API服务运行在宿主机的18080端口提供业务接口目标在Dify工作流的HTTP节点中调用这个本地API在Dify的HTTP节点中我最初填写的URL是http://localhost:180x0/api/v1/xx/prompt运行工作流后直接报错[Errno 111] Connection refused改成127.0.0.1、宿主机的局域网IP如172.168.8.43后又出现了各种不同的错误。二、排查与解决过程第一阶段从Connection refused到403 Forbidden1. 问题现象使用http://localhost:18080或http://127.0.0.1:18080时报错 [Errno 111] Connection refused2. 原因分析关键点Dify是运行在Docker容器里的。容器内的localhost指向的是容器自己而不是宿主机我的本地API服务运行在宿主机上容器内根本访问不到所以Connection refused是因为请求根本没到达我的服务。3. 解决步骤第一步改用宿主机IP查看宿主机的局域网IPip addr show | grep inet # 输出inet 172.168.xx.xx/24 brd 172.168.8.255 scope global noprefixroute eno1将Dify HTTP节点的URL改成http://172.168.xx.xx:1080/api/v1/xx/xx这时候报错变了403 Forbidden第二步排查代理问题从Dify的日志中看到请求确实到达了我的服务但返回了403。这时候注意到Dify架构中有一个ssrf_proxy服务基于Squid这是Dify为了防止SSRF攻击而设计的。查看docker-compose.yml中的ssrf_proxy配置ssrf_proxy: image: ubuntu/squid:latest restart: always volumes: - ./ssrf_proxy/squid.conf.template:/etc/squid/squid.conf.template解决方法修改Squid配置文件允许访问内网IP段。在./ssrf_proxy/squid.conf.template中添加acl allowed_internal dst 172.168.8.0/24 http_access allow allowed_internal然后重启ssrf_proxy或者在api服务中强制绕过代理仅测试环境api: environment: HTTP_PROXY: HTTPS_PROXY: no_proxy: * NO_PROXY: *但即使这样403依然存在。第二阶段从403 Forbidden到200 OK的终极突破1. 问题现象继续排查后发现在Dify容器内用curl请求我的服务能通在宿主机上用curl请求我的服务也能通但Dify HTTP节点就是返回403这就很奇怪了——同样的URL、同样的Headers、同样的Body为什么curl能通Dify却不行2. 关键发现我进入Dify的api容器用Python脚本模拟Dify的请求方式docker exec -it docker-api-1 /bin/bash python3 -c import requests url http://172.168.xx.xx:xx/api/v1/xx/xx headers { } data {parameters: {...}} response requests.post(url, headersheaders, jsondata) print(fStatus: {response.status_code}) # 输出Status: 200Python脚本能通说明请求本身没问题。3. 根源分析这时我注意到/etc/docker/daemon.json的配置{ bip: 66.65.5.xx/16, default-address-pools: [ { base: 66.66.1.1/16, size: 24 } ] }Docker容器的IP段在66.65.x.x和66.66.x.x。而我的本地API服务可能对请求来源IP有校验比如只允许192.168.x.x网段访问。推断curl和Python脚本可能走了不同的网络路由源IP被转换了但Dify HTTP节点使用的是httpx库走的是Docker默认网络源IP就是容器IP66.65.x.x我的服务拒绝了非192.168.x.x网段的请求 → 返回4034. 最终解决方案修改/etc/docker/daemon.json将Docker的网段改成192.168.x.x{ bip: 192.168.200.1/24, default-address-pools: [ { base: 192.168.201.0/16, size: 28 } ] }重启Docker服务和Dify容器sudo systemctl restart docker cd /home/winning/dify docker-compose up -d修改后Dify容器的IP变成了192.168.200.x进入了服务允许的网段问题解决三、总结Dify调用本地API服务的排查清单以后遇到类似问题按这个顺序排查能快速定位问题步骤检查项说明1️⃣检查URL地址Dify容器内不能使用localhost要用宿主机IP或host.docker.internal2️⃣检查SSRF代理Dify默认有ssrf_proxy需要在Squid配置中允许访问内网IP3️⃣对比curl和Dify请求在容器内用curl/Python模拟请求如果通而Dify不通说明是Dify发送的请求与预期有差异4️⃣检查Docker网段查看/etc/docker/daemon.json中的bip和default-address-pools确保容器IP在目标服务允许的范围内5️⃣检查目标服务的访问控制服务可能有IP白名单、Header校验等需要根据实际情况调整特别提醒修改daemon.json后必须重启Dockersudo systemctl restart docker然后重启所有容器生产环境慎用直接修改Docker网段可能影响其他服务建议优先调整目标服务的白名单配置善用容器内测试进入容器用curl测试是最直接的排查手段四、遇到的问题和解决方法汇总问题1[Errno 111] Connection refused原因使用了localhost或127.0.0.1Dify容器内访问不到宿主机服务。解决方法使用宿主机局域网IP如172.168.8.43或host.docker.internal仅Docker Desktop for Windows/Mac支持。问题2403 ForbiddenSquid拦截原因Dify的ssrf_proxySquid默认拦截对内网IP的访问。解决方法修改ssrf_proxy/squid.conf.template添加允许访问的内网IP段或临时在api服务中清空代理环境变量。问题3Temporary failure in name resolution原因Linux下Docker容器不支持host.docker.internal域名。解决方法改用宿主机的实际IP地址如172.168.8.43。问题4403 Forbidden服务端拒绝原因Docker容器IP不在目标服务的允许范围内如IP白名单。解决方法修改/etc/docker/daemon.json将Docker网段调整到服务允许的IP范围内或调整服务端白名单配置。最后网络问题排查有时候就是这么曲折但只要抓住“请求到底到没到服务”、“服务为什么拒绝”这两个核心一步步拆解总能找到根源。希望这篇文章能帮到遇到类似问题的你

相关新闻

Havenlon | 杂谈:AI 为什么越来越像人?因为它正在经历一次“厚积薄发“

Havenlon | 杂谈:AI 为什么越来越像人?因为它正在经历一次“厚积薄发“

小时候,大人常对我们说一句话:书读多了,人会越来越聪明。这句话在当时几乎无法被验证。一本书读完,人不会立刻变得不同;十本书读完,一个孩子与同龄人之间也看不出明显差距。它更像一句安慰,而不…

2026/8/26 15:45:12 阅读更多 →
Logs 的原理

Logs 的原理

目录 第一部分 Logs 第二部分 操作 第三部分 AI 要点(只建框架) 第一部分 Logs 1. 一条日志本质上是什么 一条日志 带时间戳的事件记录。最小形态:时间 谁说的 严重程度 说了什么 可观测性里还希望有:服务名、实…

2026/8/25 14:07:01 阅读更多 →
《什么是线性回归,成本函数,梯度下降》

《什么是线性回归,成本函数,梯度下降》

线性回归:线性回归就是找一条直线,让这条直线贴合数据,用来预测新的数据成本函数:成本函数就是用来衡量这条直线画的好不好的一个数字。误差越大,成本越高,画的越差。梯度下降:梯度下降是一种方…

2026/8/25 14:07:01 阅读更多 →

最新新闻

Agent任务拆解:从Prompt到可校验可追踪的稳定工程流程

Agent任务拆解:从Prompt到可校验可追踪的稳定工程流程

很多开发者在搭完第一个 Agent 的时候,都会经历一个类似的心路历程:Demo 阶段一切都很丝滑,让大模型查资料、写代码、调工具,每一步都像模像样;一旦把真实业务接进系统,Agent 就开始花式翻车。要么漏掉关键…

2026/8/27 21:12:25 阅读更多 →
LTC2946电源轨监测实战:I2C接口下的电压电流功率与能量测量

LTC2946电源轨监测实战:I2C接口下的电压电流功率与能量测量

做电源轨监测这几年,我越来越觉得“能测电压”和“会算电能量”是两回事。去年在改一台48V工业设备的电源板时,主控要同时盯住电压、电流、瞬时功率,还要统计整块板子上电过程的电荷和能量,接口最好用I2C,方便直接挂到…

2026/8/27 21:12:25 阅读更多 →
Freescale高灵敏度加速度计应用实践:选型、硬件与调试全攻略

Freescale高灵敏度加速度计应用实践:选型、硬件与调试全攻略

Freescale的高灵敏度加速度计,说实话在MEMS传感器圈子里算是一代经典。我最早接触这个系列是在做工业状态监测的项目,当时需要检测低速重载设备的微小振动,找了一圈发现Freescale(现在叫NXP)的MMA系列在分辨率和噪声特…

2026/8/27 21:12:25 阅读更多 →
AD/DA转换器原理、选型与PCB设计避坑指南

AD/DA转换器原理、选型与PCB设计避坑指南

1. 项目缘起:从“未知引脚”到信号世界的桥梁最近在调试一个嵌入式项目时,遇到了一个让人头大的问题:系统读取到的传感器数据总是飘忽不定,时准时不准。用万用表量模拟信号是稳定的,但到了微控制器里就变成了“跳跳糖”…

2026/8/27 21:12:25 阅读更多 →
C语言strcmp模拟实现:底层内存契约与安全编码实践

C语言strcmp模拟实现:底层内存契约与安全编码实践

1. 为什么“模拟实现strcmp”是C语言学习路上绕不开的硬核关卡刚接触C语言字符串处理时,我见过太多人对着strcmp函数文档发呆:它返回一个整数,但这个整数到底代表什么?为什么不是简单的true/false?为什么比较两个相同字…

2026/8/27 21:12:25 阅读更多 →
Python 机器学习库 Top 10,你值得拥有!

Python 机器学习库 Top 10,你值得拥有!

随着人工智能技术发展且普及开来, 它超越了好多其他编程语言, 变成了机器学习领域里极热门且极常用的编程语言当中的一个。致使它在众多开发者里这般受追捧存在好多缘由, 其中一个便是它有着大量跟机器学习相关的开源框架以及工具库。依据它的数据表明, 45%的科技公司都趋向于把…

2026/8/27 21:11:25 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/27 17:46:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/27 20:00:17 阅读更多 →