← 返回 GitHub Proxy 最新地址发布 - GitHub 文件 , Releases 首页

代理连接超时怎么排查?从本地端口、Git残留配置到节点链路的定位步骤

更新于 2026-10-21 · ghproxy.cyou

简答:遇到代理连接超时(<code>Connection timed out</code>),请勿盲目切换节点或重装软件,先在终端执行 <code>curl -v -x http://127.0.0.1:代理端口 https://example.com</code> 定位断点。若回显停留在连接本地 IP,说明本地监听端口未开启或填错;若本地握手成功但后续卡住,多为历史代理环境变量冲突、客户端系统时间不同步(如 VMess 协议限制)、Git SSH 22 端口被防火墙拦截,或远程代理节点至目标网站链路受阻。按“本地端口→残留配置→协议匹配→节点链路”逐层核对即可修复。

定义:代理连接超时(Proxy Connection Timeout)是指客户端、本地代理软件、远程代理服务器与目标网站之间的任一网络链路,未能在预设时间内完成 TCP 握手、TLS 协商或协议响应而导致的请求中断现象。

先试这一步:用一条命令判断超时出在哪个环节

免责与时效说明:本站为第三方使用指南站(非 GitHub Proxy 官方,相关服务状态以官方为准)。文中配置说明与测试命令核实于 2026-10-21,各代理客户端的图形菜单名称以当前版本界面为准。

当程序或终端报连接超时,最怕在不知道断点位置的情况下盲目改配置。在排查前,建议先确认你已经了解基本的代理服务器与 Windows 代理设置原理。接下来,你可以直接使用系统自带的 curl 命令发起一次带详细日志的代理请求。

命令前提:请先打开你的代理客户端,查看当前本地监听的 HTTP 或 SOCKS5 端口号(以下示例假设本地监听地址为 127.0.0.1,端口为 7890,请替换为你客户端实际显示的端口,无需 sudo 权限)。

curl -v -x http://127.0.0.1:7890 https://example.com

根据 curl 官方文档 CURLOPT_PROXY 说明,-x(或 --proxy)参数用于指定代理服务器地址与协议(未指定协议前缀时默认为 http://,若未写端口则 libcurl 默认尝试 1080 端口)。观察终端输出的 * 开头日志,即可对号入座:

为什么浏览器能正常上网,但终端命令行(Git / curl / 包管理器)依然连接超时?

这是开发者最常遇到的环境隔离误区:勾选了代理客户端的“系统代理”后,Chrome 或 Edge 浏览器可以正常访问网页,但在终端执行 git clone、npm install 或 pip 时却一直卡住并报 Connection timed out。

出现该现象的可能原因包括【本站判断】:

步骤 1:无损自查与清除冲突的系统环境变量(按平台操作)

注意警告:修改或删除系统级永久环境变量前,请先记录原有变量值以便恢复;以下清除命令默认仅对当前打开的终端窗口生效,属于无损排查操作。

1. Windows 平台(PowerShell 与 CMD)

  1. 在 PowerShell 中查看当前是否存在代理环境变量:
    Get-ChildItem Env: | Where-Object { $_.Name -match "PROXY" }
  1. 如果输出了与当前代理客户端端口不符的 HTTP_PROXY、HTTPS_PROXY 或 ALL_PROXY,在当前窗口临时清空它们:
    Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
    Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
    Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue
  1. 若你在 CMD 命令提示符下操作,可执行 set HTTP_PROXY= 与 set HTTPS_PROXY= 临时清空。若重启终端后旧变量依然出现,需前往“系统属性 → 高级 → 环境变量”面板中核对并备份修改。

2. macOS 与 Linux 平台(Bash / Zsh)

  1. 在终端中打印所有代理相关环境变量(注意大小写均需检查):
    env | grep -i proxy
  1. 若发现指向失效端口的变量,在当前会话中取消挂载:
    unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
  1. 备份与持久化修复:如果每次新建终端都会自动加载错误的代理端口,请先执行 cp ~/.zshrc ~/.zshrc.bak(或 ~/.bashrc)备份配置文件,再打开文件删除或修正其中的 export http_proxy=... 行,最后执行 source ~/.zshrc 生效。

步骤 2:核对与重置 Git 专属代理配置

根据 Git 官方文档 git-config 说明,Git 的 http.proxy 配置项会覆盖环境变量中的 http_proxy、https_proxy 和 all_proxy 设置。因此即便清空了系统环境变量,Git 内部残留的代理配置依然会导致拉取代码超时。

  1. 查看 Git 全局与当前仓库的代理设置:
    git config --global --get http.proxy
    git config --global --get https.proxy
    git config --local --get http.proxy
  1. 若返回的地址端口已失效,执行以下命令清除残留配置:
    git config --global --unset http.proxy
    git config --global --unset https.proxy
  1. 若需要重新绑定当前代理客户端端口(例如本地 SOCKS5 端口为 10808,并让代理端解析域名),可按 libcurl 支持的协议前缀配置为 socks5h:// 或 http://:
    git config --global http.proxy http://127.0.0.1:7890
  1. 如果你依然无法确定 Git 到底卡在哪一步,可按 Git 官方环境变量文档的方法开启底层 curl 调试日志(仅单次测试使用):
    GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git.git

协议与端口不匹配:HTTP、SOCKS5 与 Git SSH 22 端口超时排查

有时候代理端口没填错,但协议类型用混了,或者请求根本没走你配置的代理协议,同样会表现为连接超时。

1. 区分 HTTP 代理、HTTPS 代理与 SOCKS5 代理

在编写 Python(如 requests)、Node.js 代码或配置命令行代理时,协议头写错会导致握手卡死:

2. 解决 Git SSH 22 端口连接超时(改用 443 端口)

很多用户配置好了 git config --global http.proxy,但在执行 git push 或 git pull 时依然报错:ssh: connect to host github.com port 22: Connection timed out。

原因在于:你的仓库远程地址是 [email protected]:... 格式,它走的是 SSH 协议(默认端口 22),根本不会读取 Git 的 http.proxy 配置;同时许多局域网、校园网或运营商防火墙会直接丢弃 22 端口的数据包。

根据 GitHub 官方文档 Using SSH over the HTTPS port,你可以通过 HTTPS 使用的 443 端口来建立 SSH 连接(注:GitHub 官方指出该功能目前不支持 GitHub Enterprise Server 及开启数据驻留的 Enterprise Cloud 用户):

  1. 先在终端执行以下测试命令,验证你的网络能否通过 443 端口连通 GitHub 的专用 SSH 主机(注意主机名是 ssh.github.com 而非 github.com):
    ssh -T -p 443 [email protected]
  1. 如果终端返回 Hi USERNAME! You've successfully authenticated...,说明 443 端口畅通。接下来请先备份你的 SSH 配置文件(若文件已存在):
    cp ~/.ssh/config ~/.ssh/config.bak
  1. 打开或新建 ~/.ssh/config 文件,按 GitHub 官方文档示例加入以下四行配置,强制将所有发往 github.com 的 SSH 连接重定向到 443 端口:
    Host github.com
        Hostname ssh.github.com
        Port 443
        User git
  1. 保存后再次执行 ssh -T [email protected] 验证即可(首次连接切换端口后若提示 known_hosts 警告,核对指纹无误后输入 yes 即可)。如果你只是想单纯拉取公开文件或发行版安装包,也可以参考本站的 GitHub 文件与 Release 下载方法 改用 HTTPS 直链方式。

客户端节点全部显示超时的排查清单

如果你打开代理客户端(如 v2rayN、Clash Verge Rev、Shadowrocket 或 Stash 等),发现所有节点测速全部显示 Timeout 或全红无法连接,请按以下顺序逐项排除:

代理链路正常,但访问特定网站超时怎么办?

当你用 curl -v -x 测试大多数网站都很顺畅,唯独访问某一个特定网站(或调用某个特定 API、高频抓取数据)时提示连接超时,说明问题不在你的本地电脑,而在于远程代理节点的出口 IP 与目标网站之间。

代理连接超时(Connection timed out)现象 → 可能原因 → 无损自查方法速查表

报错现象 / 发生场景可能原因无损自查与修复方法依据来源
curl 测试卡在 Trying 127.0.0.1:端口 后报错代理客户端未运行,或本地监听端口与命令填写不一致核对客户端面板显示的 HTTP/SOCKS 混合端口,修改代理配置中的端口号curl 官方文档 CURLOPT_PROXY
浏览器能正常访问,但 Git / 终端命令一直连接超时终端残留了旧的 HTTP_PROXY 环境变量,或 Git 内部 http.proxy 覆盖了环境变量执行 env | grep -i proxy 与 git config --global --get http.proxy 核对并清除旧端口Git 官方文档 git-config
执行 git push / clone 报 port 22: Connection timed out仓库使用 SSH 协议,不走 HTTP 代理,且局域网或运营商防火墙封锁了 22 端口执行 ssh -T -p 443 [email protected] 测试,并在 ~/.ssh/config 配置 443 端口转发GitHub 官方文档 Using SSH over HTTPS
客户端内所有 VMess 等节点测速全部显示超时本地操作系统时间与标准 UTC 时间偏差超过 90 秒至 2 分钟,导致协议认证被拒打开操作系统日期与时间设置,立即进行 NTP 网络时间同步V2Fly 官方 VMess 协议文档
使用 socks5:// 代理访问特定域名连接超时socks5:// 默认在本地解析 DNS,遭遇本地 DNS 污染返回了不可达的错误 IP将代理协议前缀改为 socks5h://,强制交由远程代理服务器解析目标域名curl 官方文档 CURLOPT_PROXY
代理访问普通网页正常,唯独特定网站或自动化请求超时目标网站防火墙风控拉黑了当前代理节点的机房 IP,或客户端分流规则误判为直连查看客户端实时连接日志确认是否走代理,更换其他地区/线路节点重试【本站判断】

常见问题

配置本地代理时,应该填 http://127.0.0.1:端口 还是 https://127.0.0.1:端口?

绝大多数本地代理客户端监听的 HTTP 端口都是明文 HTTP 代理(通过 HTTP CONNECT 隧道承载加密的 HTTPS 网页流量),因此无论是代理 HTTP 还是 HTTPS 网站,代理服务器地址本身都应填写 http://127.0.0.1:端口。如果误填为 https://127.0.0.1:端口,工具会尝试与本地代理端口进行代理层 TLS 握手,反而引发连接超时或 SSL 握手失败。

为什么我已经设置了 http.proxy,执行 git clone [email protected]:xxx.git 还是报 22 端口连接超时?

因为 [email protected] 开头的仓库地址使用的是 SSH 协议(默认走 22 端口),而 git config 中的 http.proxy 仅对 http:// 和 https:// 开头的仓库地址生效。要解决 SSH 22 端口超时,你可以将仓库地址改为 https://github.com/ 开头,或者按 GitHub 官方文档在 ~/.ssh/config 中将 ssh.github.com 的端口改写为 443。

在终端执行 unset 清除代理环境变量后,为什么重新打开终端又恢复了旧代理导致超时?

unset(或 Windows PowerShell 中的 Remove-Item Env:)仅对当前正在运行的终端会话生效。如果重启终端后旧代理依然存在,说明该变量被写进了你的 Shell 启动脚本(如 ~/.zshrc、~/.bashrc、~/.bash_profile)或 Windows 系统属性的高级环境变量面板中,需要打开对应配置将其删除。

代理客户端面板里节点延迟显示 Timeout,就一定代表节点不能用吗?

不一定【本站判断】。客户端面板的延迟测试通常依赖向特定测试网址(如 gstatic 的 generate_204)发送请求或发送 ICMP 包。如果节点服务器禁用了 Ping,或测试网址在当地网络受阻,面板就会显示 Timeout。建议直接用 curl -v -x 命令或打开目标网页实测连通性。

相关阅读

参考资料

  1. CURLOPT_PROXY - libcurl Official Documentation(curl.se)
  2. Discover your proxy - everything curl Official Guide(everything.curl.dev)
  3. git-config Documentation - Git Official Reference(git-scm.com)
  4. Using SSH over the HTTPS port - GitHub Docs
  5. Before Deployment (Time Sync) - V2Ray Beginner's Guide(guide.v2fly.org)