COW:让终端也能优雅上网的 HTTP 代理
在命令行里折腾 curl、go get、git clone 的时候,最让人崩溃的往往不是报错,而是卡在下载那一行不动。浏览器里有各种代理插件帮你分流,可终端程序大多只认 http_proxy 环境变量——一旦设置,所有流量都得走代理,国内站点也跟着绕道走,速度感人。
cow 就是为了解决这个痛点诞生的。它用 Go 写的一个 HTTP 代理,核心卖点是能自动区分哪些请求该走代理、哪些该直连,而且配置起来非常省心。
COW 是什么
cow(climb over the wall 的缩写)是一个轻量级的 HTTP 代理服务器。它不像 ss/v2ray 那样需要远端服务器配合,而是自己跑在本地,帮你做「智能分流」。
它的工作模型很朴素:
- 在本地起一个 HTTP 代理端口(默认 7777)
- 你让终端程序把 HTTP 请求发给它
- 它判断这个请求的目标域名,该走代理的转发到上游代理,该直连的直接连
所以它本质上是一个「本地代理前置 + 分流决策」的角色,真正的翻墙能力来自你已经在用的上游代理(比如另一个 ss 的 HTTP 端口、公司的出口代理等)。
核心特性
1. 智能分流,无需手动维护规则
这是 cow 最有价值的地方。它的分流策略是有状态、自学习的:
- 第一次遇到某个域名时,会按默认策略处理(先直连,失败就降级走代理,或者反过来)
- 一旦某个域名直连失败,它会记住这个决定,之后同名域名直接走代理
- 反过来,某个域名直连一直成功,它也倾向于保持直连
这种「试错 + 记忆」的机制意味着你几乎不用写规则,用它跑一段时间,访问过的站点分流结果就会自动收敛到合理的状态。比起 PAC 文件里手动维护一长串域名列表,体验好太多。
2. 纯 Go 实现,单文件部署
编译出来就是一个可执行文件,没有运行时依赖。丢到 /usr/local/bin 或者某个 PATH 目录就能用,nohup 一挂就完事。对于不想折腾容器、不想配置 systemd 服务的人来说,心智负担极低。
3. 配置简单
默认配置文件在 ~/.cow/rc,你只需要告诉它两件事:
- 本地监听哪个端口
- 上游代理是谁
一个最小的配置大概长这样:
# 监听地址 listen = http://127.0.0.1:7777 # 上游代理(假设你本地 ss 的 HTTP 端口是 1087) proxy = http://127.0.0.1:1087
就这样,cow 就会对需要代理的站点自动走 1087,其余的直连。
4. 支持 DIRECT / PROXY 显式规则
虽然主打自动分流,但 cow 同样支持显式的规则配置,比如:
# 强制直连 direct = *.cn direct = *.taobao.com direct = 10.0.0.0/8 # 强制走代理 proxy = *.google.com proxy = *.github.com
正则也支持,需要精确控制的时候都能覆盖。
5. 处理了「免代理 502」这类细节
写代理工具的人都知道,很多程序只认 http_proxy,一设置就把所有请求都塞过去。cow 会在内部对目标做判断,不该代理的请求自己直接转发,所以即使你全局设置了 http_proxy=http://127.0.0.1:7777,访问国内站点也不会变慢。
上手流程
# 1. 安装(Go 环境) go install github.com/cyfdecyf/cow@latest # 或者直接下载 release 二进制 # 2. 写配置 mkdir -p ~/.cow cat > ~/.cow/rc <<'EOF' listen = http://127.0.0.1:7777 proxy = http://127.0.0.1:1087 EOF # 3. 启动 cow # 4. 让终端走代理 export http_proxy=http://127.0.0.1:7777 export https_proxy=http://127.0.0.1:7777 # 5. 验证 curl -I https://www.google.com # 应该走代理 curl -I https://www.baidu.com # 应该直连
跑几天之后,你可以打开日志或者查看 ~/.cow 下的状态文件,看看它自学习出来的分流结果,基本不需要人工干预。
适合谁用
- 重度命令行用户:天天
go get、pip install、git clone,希望终端流量自动分流 - 不想维护 PAC 的人:懒得为一个域名列表反复调试
- 已有上游代理的人:cow 不负责翻墙本身,它解决的是「本地智能分流」这一层
反过来,如果你需要一个开箱即用、自带远端服务器的全功能方案,那 cow 不是目标——它更像是一个本地代理的调度器,把分流这件事做得足够省心。
一点小提醒
cow 项目本身比较老,最后一次活跃提交停滞在几年前。功能上是稳定的,Go 生态也保证了它依然能编译、能跑,但如果你追求最新协议支持或者长期维护,可能需要考虑更现代的替代品。不过对于「HTTP 代理 + 智能分流」这个具体需求,cow 的设计思路至今依然是教科书级的——让工具自己学习规则,而不是让人去维护规则,这一点值得很多同类工具借鉴。
如果你手头正好有一个本地 HTTP 代理,又想优雅地让终端也享受分流,那 cow 值得花十分钟装一下。




还没有评论,来说两句吧...