最近在云服务器上部署项目,需要 git clone 一个海外仓库。仓库不大,也就几百 MB,但 git clone 跑了十几分钟,进度条卡在 Receiving objects: 45% 不动了,最后报错:
error: RPC failed; curl 56 OpenSSL SSL_read: Connection reset by peer, errno 104
fatal: The remote end hung up unexpectedly重试了几次,每次都在差不多相同的位置断掉。换用 git clone --depth=1 浅克隆,依然慢得离谱。
一开始怀疑是 GitHub 的问题,但同一时间用浏览器访问 GitHub 网页却很正常。这就排除了目标服务完全不可用的可能,问题大概率出在本地到 GitHub 之间的网络链路上。
先确认服务器到 GitHub 的基本连通性:
ping -c 20 github.com延迟在 200ms 左右,有轻微丢包,但不至于完全断连。
用 curl 测试下载速度:
curl -o /dev/null -w "%{speed_download} bytes/s\n" https://github.com/xxx/xxx/archive/refs/heads/main.zip速度显示 56K 左右,稳定地慢。
再用 mtr 跟踪到 GitHub 的路由:
mtr -r -c 100 github.com发现中间某个节点存在 5%-10% 的丢包。但更关键的是,我注意到服务器出口 IP 的 ASN 归属:
curl -s https://ipinfo.io/json | jq '.org, .asn'结果显示是某云服务商的数据中心网段。
很多海外代码托管平台(GitHub、GitLab、Bitbucket)对数据中心 IP 有速率限制。因为机房 IP 常被用于大规模爬取、滥用和自动化攻击,平台为了保障正常用户的访问体验,会对机房 IP 做 QoS 降级。表现就是:能连上,但速度被压得很低,且连接容易中断。
这也解释了为什么浏览器访问网页正常(网页流量小,不容易触发限速),而 git clone 这种持续大流量传输却被限制。
既然瓶颈在出口 IP,解决方案就是换一个住宅 IP 出口。住宅 IP 的 ASN 归属于当地运营商,在 GitHub 的访问策略中不会被限速。
Git 支持通过 HTTP 代理拉取仓库,配置方法如下:
1. 临时使用(仅当前命令生效)
# ============================================
# 住宅 IP 出口配置示例
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
export HTTPS_PROXY=http://用户名:密码@gateway.1024proxy.com:端口
export HTTP_PROXY=http://用户名:密码@gateway.1024proxy.com:端口
git clone https://github.com/xxx/xxx.git2. 全局配置(所有 Git 操作走代理)
# ============================================
# 住宅 IP 出口配置示例
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
git config --global http.proxy http://用户名:密码@gateway.1024proxy.com:端口
git config --global https.proxy http://用户名:密码@gateway.1024proxy.com:端口
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy3. 只对特定域名走代理
如果不想全局代理,可以只针对 GitHub 配置:
git config --global http.https://github.com.proxy http://用户名:密码@gateway.1024proxy.com:端口配置前:
git clone 平均速度:50-60 KB/s配置后:
速度提升非常明显,而且稳定了很多。
不只是 Git,以下场景也可能因为出口 IP 是数据中心而变慢:
这些场景都可以用同样的思路解决:配置代理,让流量走住宅 IP 出口。
以下是一个 Python 示例,演示如何通过住宅 IP 出口加速 pip 安装:
# ============================================
# 住宅 IP 出口加速海外包安装示例
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
import subprocess
# 配置住宅 IP 代理
proxy = "http://用户名:密码@gateway.1024proxy.com:端口"
# 通过代理安装海外包
subprocess.run([
"pip", "install",
"--proxy", proxy,
"some-overseas-package"
])云服务器拉取海外代码仓库慢,不一定是带宽不够,也不一定是 GitHub 的问题。出口 IP 的类型是一个容易被忽略的关键因素。数据中心 IP 在海外服务的信誉体系中优先级较低,容易被限速。切换到住宅 IP 出口后,速度通常会有数量级的提升。
以上配置方法供参考,具体服务商可根据实际需求测试选择。
本文仅做技术交流,请遵守相关平台规则与法律法规。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。