问题:dify 工具(Swagger API 导入)调用 api/v3/pet/findByStatus 报 SSRF 拦截
在 dify → 工具 → 通过 Swagger API 作为工具方式导入文件 后,测试调用接口:
/api/v3/pet/findByStatus
报错如下(核心是 SSRF protection):
Access to ‘http://host.docker.internal/api/v3/pet/findByStatus’ was blocked by SSRF protection …
The URL resolves to a private, loopback, link-local, or otherwise non-public network address.
参考:https://github.com/langgenius/dify/issues/38443
原因
host.docker.internal 在当前网络环境下会被识别为 内网/非公网地址,dify 默认会对这类地址进行 SSRF 防护拦截,因此工具调用失败。
解决办法
1)修改 Dify 的 .env(推荐同步改 example.env)
进入 Dify 安装目录,打开 .env(最好同步把 example.env 也改一下),新增/修改以下配置并保存:
SSRF_PROXY_ALLOW_PRIVATE_IPS=172.17.0.0/16 # 以你实际的内网网段为准
SSRF_PROXY_ALLOW_PRIVATE_DOMAINS=host.docker.internal
注意:
SSRF_PROXY_ALLOW_PRIVATE_IPS填你自己的内网网段(示例为 172.17.0.0/16)。
2)重启 ssrf_proxy 服务
回到 dify-docker 目录,按顺序执行:
docker compose down ssrf_proxy
docker compose up -d ssrf_proxy