问题:dify 工具(Swagger API 导入)调用 api/v3/pet/findByStatus 报 SSRF 拦截


问题: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

3)刷新并重新测试

刷新 dify,再次测试接口调用即可。