直接换国内镜像源并清缓存比调超时更有效;若用代理,必须同时配置http-proxy和https-proxy,且https-proxy值须以http://开头,否则HTTPS请求静默直连导致卡在Loading composer repositories或cURL error 28。

直接换国内镜像源 + 清缓存,比调超时参数更有效;如果必须走代理,http-proxy 和 https-proxy 必须同时配,且 https-proxy 的值协议头必须是 http://,不是 https:// 或无协议。
为什么只设 http-proxy 一定失败
Composer 对 HTTP 和 HTTPS 请求走两套完全独立的代理路由。所有仓库(packagist.org、镜像站、GitHub API)全量走 HTTPS,只配 http-proxy 会让这些请求静默 fallback 到直连——结果就是卡在 Loading composer repositories,或反复报 cURL error 28,却无明确错误提示。
-
https-proxy的值必须以http://开头,哪怕你的代理服务监听的是 HTTPS 端口(如 Clash 的 7890) - 错误写法:
https://127.0.0.1:7890、127.0.0.1:7890—— 这两种都会静默失效 - 带认证时密码含
@或/必须 URL 编码,例如:http://user:pa%40ss%2Fword@127.0.0.1:8080 - 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",必须看到两行且格式合规
换镜像源比加 timeout 更治本
80% 的“超时”本质是 DNS 污染、TLS 握手抖动或境外源响应延迟,不是带宽问题。阿里云镜像是目前最稳定的选择。
- 全局启用:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 必须清缓存:
composer clear-cache,否则旧缓存仍会尝试连packagist.org - 验证是否生效:
composer config -g repo.packagist应输出完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 禁用回源(防拖慢):
composer config -g repo.packagist false - 注意:URL 末尾必须带
/,否则 Composer 2.5+ 会静默失败
http-basic-timeout 和 process-timeout 必须一起调
这两个超时机制独立生效、不可替代。只改一个,下载卡在 Downloading 或 The process timed out 依然会发生。
-
http-basic-timeout(Composer 2.2+)控制单次 HTTP 请求全过程:DNS 解析 + TLS 握手 + 首字节等待 + body 传输,默认仅 60 秒 -
process-timeout控制子进程执行(git clone、unzip、脚本运行等),默认 300 秒 - 临时调试:
composer install --timeout=1200 --http-basic-timeout=300 - 永久设置:
composer config -g process-timeout 1800和composer config -g http-basic-timeout 300 - PHP 的
default_socket_timeout(查法:php -i | grep default_socket_timeout)若低于你设的http-basic-timeout(常见值为 60),会提前掐断连接,务必同步调高
华为源/腾讯源配置不生效?先看键名和版本兼容性
Composer 2.2+ 不再识别旧键名 repo.packagist,必须用 repositories.packagist.org,否则静默回退官方源。
- 华为云正确写法:
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.huaweicloud.com/repository/php/"}' - 腾讯云同理,URL 末尾必须带
/ - 验证命令:
composer config -g repositories.packagist.org,输出应为完整 JSON 对象 - 如果输出为空、报错或仍是
packagist.org官方地址,说明配置没写对,不是镜像本身问题 - NTLM 代理(如公司 Windows 域环境)无法被 Composer 原生支持,必须用
cntlm或px中转,并把两个 proxy 都指向中转地址
最容易被忽略的是缓存残留和键名版本不匹配——哪怕代理和镜像都配对了,composer clear-cache 没跑,或者 repositories.packagist.org 写成 repo.packagist,都会让所有配置形同虚设。











