“明明按教程配好了站大爷隧道代理,OpenClaw怎么就是连不上网?”
“代理配置看起来没问题啊,格式也对了,但一跑任务就报错……”
这是我在使用OpenClaw+站大爷隧道代理时,踩得最深、卡得最久的一个坑。前前后后折腾了好几天,翻遍了GitHub Issues和各大技术社区,最后发现问题的根源说出来可能你都不信——不是代理本身的问题,是HTTP和HTTPS协议配置搞混了。
今天就把这个坑完完整整地记录下来,包括踩坑的全过程、错误的现象、背后的原理,以及正确的配置方法。如果你也遇到了类似的问题,希望这篇文章能帮你省下那几天抓狂的时间。
一、踩坑现场:配置好了,就是连不上
我按照教程在OpenClaw的config.yaml里配好了站大爷隧道代理,大致是这样的:
proxy:
http: "http://隧道ID:密码@tps.zdaye.com:8080"
https: "http://隧道ID:密码@tps.zdaye.com:8080" # ← 注意这里
看起来没毛病吧?格式对了,用户名密码也填了,端口也对了。
然后启动OpenClaw,跑一个简单的测试指令:
访问 https://httpbin.org/ip,看看当前出口IP
结果等了半天,OpenClaw返回了一个错误:
Network request failed: unable to connect to proxy
或者更具体一点的报错:
Error: connect ECONNREFUSED 隧道ID:密码@tps.zdaye.com:8080
我当时第一反应是:代理是不是挂了? 赶紧用curl单独测试了一下:
curl -x http://隧道ID:密码@tps.zdaye.com:8080 https://httpbin.org/ip
结果curl完全正常,返回了正确的代理IP。这说明代理服务本身没问题。
那问题出在哪?OpenClaw为什么就不能用?
二、问题根源:HTTPS请求走了HTTP代理配置
经过反复测试和查阅资料,终于找到了原因。
核心问题就一句话:OpenClaw发起HTTPS请求时,走的却是HTTP代理配置。
站大爷隧道代理的入口格式是http://用户名:密码@域名:端口——注意协议是http://开头。这本身没问题,因为隧道代理全面支持HTTP/HTTPS及SOCKS协议,兼容性很好。
但是!OpenClaw在处理代理配置时有一个“潜规则”:
- 当你要访问HTTP网站时,OpenClaw会使用
proxy.http配置 - 当你要访问HTTPS网站时,OpenClaw会使用
proxy.https配置
大多数情况下,我们会把同样的代理地址同时填给http和https。这没问题。
问题出在协议前缀上。
站大爷隧道代理入口的协议是http://,这是正确的。但在某些OpenClaw版本或特定网络环境下,当proxy.https配置的地址以http://开头时,OpenClaw在处理HTTPS请求时可能会产生协议混淆——它试图用HTTP代理的方式去处理HTTPS流量,导致连接失败。
具体来说,就是OpenClaw向代理服务器发送的CONNECT请求格式不正确,代理服务器无法理解,于是返回了连接拒绝或协议错误。
三、两种典型的错误表现
| 错误类型 | 典型日志 | 含义 |
| 连接被拒绝 | Error: connect ECONNREFUSED tps.zdaye.com:8080 |
代理服务器要求认证,但OpenClaw发送的认证信息格式不对 |
| 代理隧道失败 | Error: Proxy connection failed: CONNECT request failed |
CONNECT请求格式有问题,可能是协议版本或请求头异常 |
如果配置正确,你应该看到类似这样的输出:
{
"origin": "203.0.113.88"
}
四、解决方案:三种方法任选
经过多次试验,我找到了三种有效的解决方案。
方法一:把https代理改成和http一模一样
把proxy.https配置得和proxy.http完全一致:
proxy:
http: "http://隧道ID:密码@tps.zdaye.com:8080"
https: "http://隧道ID:密码@tps.zdaye.com:8080" # 完全一样
这是最快见效的方法。如果这样配置后还是不行,试试下面两种。
方法二:只配http,让https自动继承
有些版本的OpenClaw支持代理继承逻辑:如果proxy.https没有配置,就自动使用proxy.http的配置。
proxy:
http: "http://隧道ID:密码@tps.zdaye.com:8080"
# https不配,自动继承http的配置
这种方法更简洁,也避免了协议混淆的可能。
方法三:用环境变量代替配置文件(最彻底)
如果YAML配置文件怎么改都不行,可以直接用环境变量配置代理。这是最底层、最可靠的方式。
Mac/Linux:
export HTTP_PROXY="http://隧道ID:密码@tps.zdaye.com:8080"
export HTTPS_PROXY="http://隧道ID:密码@tps.zdaye.com:8080"
openclaw gateway start
Windows(PowerShell):
$env:HTTP_PROXY="http://隧道ID:密码@tps.zdaye.com:8080"
$env:HTTPS_PROXY="http://隧道ID:密码@tps.zdaye.com:8080"
openclaw gateway start
五、为什么环境变量方案最稳?
OpenClaw底层依赖Node.js的HTTP/HTTPS模块发送网络请求。当你在YAML配置文件中设置代理时,OpenClaw需要自己解析配置、创建代理Agent。这个过程涉及代理认证信息提取、CONNECT请求构造、TLS隧道建立等复杂逻辑,在不同版本中可能存在细微差异。
而HTTP_PROXY/HTTPS_PROXY环境变量是Node.js原生支持的机制,由Node.js底层直接处理代理连接,绕过了OpenClaw自己实现的代理逻辑,因此更加稳定可靠。
事实上,OpenClaw官方文档在排查渠道连接问题时也指出:检查Gateway网关的
HTTPS_PROXY/HTTP_PROXY环境变量是“最快检查”之一。
六、其他可能导致无法联网的原因
除了HTTP/HTTPS协议混淆,还有几个常见原因也值得排查:
- 代理格式写错了:❌
http://tps.zdaye.com:8080(没写用户名密码)✅http://用户名:密码@tps.zdaye.com:8080 - 认证信息中有特殊字符:如果密码里包含
@、:、#等特殊字符,需要进行URL编码(如@→%40) - 网络防火墙拦截:检查防火墙是否放行了代理端口(通常是8080)
- IPv6与IPv4冲突:某些环境下OpenClaw解析代理域名时可能优先走IPv6,导致连接失败
七、总结
OpenClaw配置代理后无法联网,90%的情况下是HTTP/HTTPS协议混淆导致的。
解决方案(按推荐程度排序):
| 方法 | 操作 | 稳定性 | 推荐度 |
| 环境变量 | export HTTP_PROXY=... |
⭐⭐⭐⭐⭐ | 最推荐 |
| 只配http | 只填proxy.http |
⭐⭐⭐⭐ | 推荐 |
| 双配一致 | http和https填一样 | ⭐⭐⭐ | 可用 |
与其在YAML配置上反复试错,不如直接用环境变量方案。这是最底层、最可靠的代理配置方式,能绕开OpenClaw代理逻辑中可能存在的各种“坑”。
站大爷隧道代理本身协议兼容性很好,支持HTTP/HTTPS及SOCKS多协议,配置关键在于让OpenClaw正确地把它用起来。如果代理配好后用curl能通但OpenClaw不通,基本就是协议混淆问题——记住:用环境变量,不纠结YAML。