Composer网络不稳定90%非自身问题,而是卡在DNS、TCP、TLS或IPv6 fallback环节;Resolving dependencies阶段纯属DNS解析,代理和http.timeout无效,需用dig验证并换DNS;Downloading阶段才启用http.timeout、镜像和代理,URL末尾必须带/,且需清缓存并检查项目级repositories覆盖。

Composer 网络连接不稳定导致的超时,90% 不是 Composer 本身的问题,而是系统卡在 DNS、TCP 连接、TLS 握手或 IPv6 fallback 某一层——别急着改配置,先验证链路。
卡在 Resolving dependencies 是 DNS 问题,不是代理能救的
这一步只做域名解析(比如查 mirrors.aliyun.com 的 IP),不走 HTTP、不读代理、不认 http.timeout。它失败,代理和超时设置全无效。
- 运行
dig mirrors.aliyun.com @114.114.114.114,看是否返回有效 IPv4 地址;若超时或无响应,说明本地 DNS 被污染或不可用 - 临时换 DNS:Linux/macOS 编辑
/etc/resolv.conf加nameserver 8.8.8.8;Windows 在网络适配器里手动设 - 检查
/etc/hosts(或C:\Windows\System32\drivers\etc\hosts)是否误把mirrors.aliyun.com指向了127.0.0.1或错误 IP - 用手机热点试一次——很多企业网会屏蔽
packagist.org和github.com域名,但热点通常直连通畅
卡在 Downloading 才该动 http.timeout 和镜像源
只有到这一步,Composer 才真正发起 HTTP 请求,此时 http.timeout、http.proxy 和镜像源才起作用。
- 全局延长 HTTP 元数据请求超时:
composer config -g http.timeout 600(单位秒,600 = 10 分钟) - 项目级更稳妥(尤其 CI 环境):在
composer.json的"config"段加"http.timeout": 600 - 镜像 URL 必须带末尾斜杠:
https://mirrors.aliyun.com/composer/✅,少一个/就 404 ❌ - 代理必须用
http.proxy配置项,不是https.proxy或其他别名;带认证的格式为http://user:pass@127.0.0.1:8080,密码含特殊字符需 URL 编码
process-timeout 和 http.timeout 控制的是不同阶段
process-timeout 控制整个命令生命周期(如 install 总时长),而 http.timeout 只影响第一步 HTTP 元数据请求(如拉 /packages.json);第二步代码下载往往走 git clone,它完全不受 Composer 配置控制。
-
composer config -g process-timeout 0禁用进程超时(CI/CD 中建议用COMPOSER_PROCESS_TIMEOUT=0环境变量固化) -
git clone卡死?单独配 Git:git config --global core.sshCommand "ssh -o ConnectTimeout=30" - 想强制跳过 git、改用 zip 下载(对 GitHub 包有效):
composer config -g github-protocols https - IPv6 fallback 会导致“卡住但不报错”:默认先试 IPv6,超时(1–3 秒)再 fallback 到 IPv4;上百个包叠加就是几分钟无响应。验证方法:
curl -v https://packagist.org 2>&1 | grep "Connected to",看到 IPv6 地址后卡住基本就是它
换源后仍报错,大概率是缓存或项目级配置覆盖了你的设置
换了阿里云或清华源还报错,大概率不是镜像不行,而是旧缓存或项目级配置覆盖了你的设置。
- 必须执行
composer clear-cache,否则仍可能从本地缓存读取已失效地址 - 检查项目根目录
composer.json是否硬写了repositories→ 它的优先级高于全局镜像,会直接忽略config -g设的地址 - 验证是否真生效:
composer config -g repo.packagist(看全局),composer config repo.packagist(不加-g,看当前项目) - 清华镜像 URL 必须带末尾斜杠:
https://mirrors.tuna.tsinghua.edu.cn/composer/,少一个/就 404
最隐蔽的点是 IPv6 fallback 和 repositories 字段的优先级——它们不会报错,也不会提示,但会让所有调优失效。验证前先关掉 IPv6 或强制用 COMPOSER_IPRESOLVE=4,再确认项目级 composer.json 里没残留的 repositories 配置。


















