使用 Clash 作为爬虫代理
🪜

使用 Clash 作为爬虫代理

Status
Publish
Tags
Crawler
Property
Column
Feb 12, 2022 06:04 PM

起因

在做 Opensea 爬虫的时候,发现部署在 EKS 的服务网络非常不稳定,在调研多家 Proxy 服务商以后,都不太满意。在 Debug 过程中发现本地梯子机器稳定,于是便将 Clash 作为 Proxy Server 部署在集群中提供服务。

准备配置文件

根据 Wiki 中的 Config,我打算使用我自己的梯子 Proxy 信息,同时准备一个 LoadBlance 类型的 Proxy Group 进行不同 Proxy 的分流。
配置文件如下
config.yaml
# HTTP 代理端口 port: 7890 # SOCKS5 代理端口 socks-port: 7891 # Linux 和 macOS 的 redir 代理端口 redir-port: 7892 # 允许局域网的连接 allow-lan: true # 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连) mode: Rule # 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。 # 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。 log-level: info # Clash 的 RESTful API external-controller: '0.0.0.0:9090' # RESTful API 的口令 secret: '' # 您可以将静态网页资源(如 clash-dashboard)放置在一个目录中,clash 将会服务于 `RESTful API/ui` # 参数应填写配置目录的相对路径或绝对路径。 # external-ui: folder proxies: - 代理信息 proxy-groups: - { name: "Auto", type: load-balance, proxies: [代理信息], url: "http://www.gstatic.com/generate_204", interval: 100 } rules: - DOMAIN-SUFFIX,ip,Auto - MATCH,Auto
这是一份最简单的配置信息,如果需要其他配置可以参考 Wiki 改造

部署到集群中

clash.config.yaml
apiVersion: v1 kind: ConfigMap metadata: name: clash-proxy-config data: config.yaml: | # HTTP 代理端口 port: 7890 # SOCKS5 代理端口 socks-port: 7891 # Linux 和 macOS 的 redir 代理端口 redir-port: 7892 # 允许局域网的连接 allow-lan: true # 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连) mode: Rule # 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。 # 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。 log-level: info # Clash 的 RESTful API external-controller: '0.0.0.0:9090' # RESTful API 的口令 secret: '' # 您可以将静态网页资源(如 clash-dashboard)放置在一个目录中,clash 将会服务于 `RESTful API/ui` # 参数应填写配置目录的相对路径或绝对路径。 # external-ui: folder proxies: - 代理信息 proxy-groups: - { name: "Auto", type: load-balance, proxies: [代理信息], url: "http://www.gstatic.com/generate_204", interval: 100 } rules: - DOMAIN-SUFFIX,ip,Auto - MATCH,Auto
config.deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: clash-proxy labels: app: clash-proxy spec: selector: matchLabels: app: clash-proxy template: metadata: labels: app: clash-proxy spec: containers: - image: "dreamacro/clash-premium:2021.11.08" name: clash-proxy volumeMounts: - mountPath: /root/.config/clash/config.yaml name: clash-config subPath: config.yaml livenessProbe: httpGet: path: / port: 9090 ports: - name: http-proxy containerPort: 7890 - name: control-api containerPort: 9090 resources: limits: cpu: 500m memory: 512Mi volumes: - name: clash-config configMap: name: clash-proxy-config
config.service.yaml
apiVersion: v1 kind: Service metadata: name: clash-proxy-service spec: ports: - port: 7890 targetPort: http-proxy protocol: TCP name: http-proxy type: ClusterIP selector: app: clash-proxy
 

测试请求

在同 Namespace 下的容器中执行
curl --proxy clash-proxy-service:7890 https://api.my-ip.io/ip