2025年5月10日星期六

为Dify 的 ssrf_proxy 配置上游代理

 # 为Dify 的 ssrf_proxy 配置上游代理

在使用 Dify 过程中,可能会遇到需要通过代理服务器来访问外部网络的场景。Dify 使用 ssrf_proxy(Squid ) 来提升sandbox的安全性。通过配置 Squid 代理,可以方便地实现这一需求。在本文中,我们将介绍如何通过配置 Squid 的 cache_peer 和 never_direct 指令,实现所有 HTTP 请求都通过上游代理转发的目标。

#### 什么是 Squid?


Squid 是一款流行的代理服务器软件,它能够缓存 HTTP、FTP 等协议的请求,减少带宽消耗并提升访问速度。Squid 还可以充当代理服务器,将用户的请求转发给上游代理,从而为应用程序提供额外的隐私和控制功能。在配置 Dify 的 `ssrf_proxy` 服务时,我们可以利用 Squid 将 HTTP 请求通过上游代理进行转发。


#### 需求背景


在配置 `ssrf_proxy` 时,我们需要让 HTTP 请求通过 Squid 代理服务器的上游代理进行访问,避免直接访问外部网络。通过配置 Squid 的 `cache_peer` 和 `never_direct` 指令,我们可以轻松实现这个目标。


#### 配置步骤


##### 1. 打开 Squid 配置文件


在 Dify 的 Docker 配置目录中,找到 `squid.conf.template` 文件。这个文件位于 `dify/docker/` 目录下。使用任意文本编辑器打开此文件,准备进行修改。


```bash

cd dify/docker/ssrf_proxy

nano squid.conf.template

```


##### 2. 配置 `cache_peer`


`cache_peer` 指令用于指定 Squid 代理的上游代理服务器。基本语法如下:


```bash

cache_peer <hostname> <type> <http-port> <icp-port> [options]

```


- `<hostname>`:上游代理服务器的主机名或 IP 地址。

- `<type>`:代理类型,通常为 `parent`,表示这是一个上游代理。

- `<http-port>`:上游代理服务器的 HTTP 端口(如 3128)。

- `<icp-port>`:ICP 端口,如果不需要可以设置为 0。

- `[options]`:额外的选项,如 `no-query` 禁用 ICP 查询,`default` 设为默认上游代理。


例如,如果你的上游代理的 IP 地址为 `192.168.1.100`,HTTP 端口为 `3128`,则可以这样配置:


```bash

cache_peer 192.168.1.100 parent 3128 0 no-query default

```


此配置将所有请求发送到位于 `192.168.1.100` 的上游代理,并禁用了 ICP 查询功能。


##### 3. 添加 `never_direct allow all`


为了确保 Squid 代理始终通过上游代理转发请求,而不直接连接外部网络,我们需要在配置文件中添加 `never_direct allow all` 指令。这一指令强制所有请求都通过上游代理处理。


在 `squid.conf.template` 文件的合适位置(通常在 `cache_peer` 指令附近)添加以下内容:


```bash

never_direct allow all

```


##### 4. 完整配置示例


在完成上述步骤后,`squid.conf.template` 文件的完整配置可能如下所示:


```bash

# 定义上游代理

cache_peer 192.168.1.100 parent 3128 0 no-query default


# 禁止直接连接,强制使用上游代理

never_direct allow all

```


##### 5. 保存并重启服务


在完成配置后,保存文件并退出编辑器。然后,重新启动 Dify 及其 `ssrf_proxy` 服务,以应用新的 Squid 配置。你可以使用如下命令重启服务:


```bash

docker-compose down

docker-compose up -d

```


通过这种方式,你的 Squid 代理服务器就会将所有请求都转发给配置的上游代理,而不会直接访问目标服务器。


#### 结论


通过配置 `cache_peer` 和 `never_direct allow all`,我们可以强制 Squid 代理服务器将所有 HTTP 请求都通过上游代理转发。这种配置非常适合需要通过特定代理进行网络访问的场景,尤其是在企业网络或需要遵守特定网络策略的环境中。


希望这篇文章能帮助你顺利完成 Dify 的 `ssrf_proxy` 服务配置。如果你有任何疑问或进一步的需求,欢迎在评论区留言交流!

没有评论:

发表评论