composer必须同时配置http-proxy和https-proxy,缺一则install卡在“loading composer repositories”;https-proxy值须为http://协议开头,且代理需支持connect隧道。

composer config -g http-proxy 和 https-proxy 必须同时设置
Composer 不读取系统级的 HTTP_PROXY 或 HTTPS_PROXY 环境变量,只认自己配置里的两个字段:http-proxy 和 https-proxy。漏掉任意一个,composer install 就会在 “Loading composer repositories” 阶段卡住,且不报明确错误。
常见现象包括:Resolving dependencies 无响应、cURL error 35、Failed to decode response——本质都是 HTTPS 请求没走代理,被直连拦截或超时。
-
http-proxy只处理纯 HTTP 请求(极少用到),对https://packagist.org完全无效 -
https-proxy的值必须是http://协议开头(哪怕代理本身监听 HTTPS 端口),填https://127.0.0.1:8443或漏协议头(如127.0.0.1:8080)都会静默 fallback 到直连 - 代理需支持 CONNECT 隧道(Clash、Squid 4.0+ 可用;普通 HTTP 代理不行)
- 认证信息中的
@、/、:必须 URL 编码,例如密码pa@ss/word→pa%40ss%2Fword
腾讯云服务器上优先换镜像,不是配代理
你在腾讯云 CVM 上跑 composer install 卡住,大概率不是网络不通,而是 DNS 解析慢或 TLS 握手卡在海外节点。配代理反而引入额外失败点,不如直接切镜像源。
正确命令(注意末尾斜杠不能少):
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ composer clear-cache
验证是否生效:
composer config -g repo.packagist
输出应为:{"type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/"}
- 若项目根目录
composer.json里有repositories字段,它会覆盖全局配置,得先删掉或注释掉 - URL 少了末尾
/会导致Invalid repository type错误,且不提示 - 腾讯云镜像同步及时,国内访问稳定,比任何代理都快
代理配错后怎么快速验证和排查
别靠 composer install 盲试。先用更底层的工具确认代理通不通:
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json
根据返回判断问题层级:
- 返回
407 Proxy Authentication Required→ 代理需要 NTLM 认证,Composer 原生不支持,得用cntlm或px中转 - 返回
Connection refused或No route to host→ 本地代理进程没开、端口填错、或防火墙拦截 - 返回 TLS 错误(如
SSL operation failed)→ 代理未正确透传 TLS 流量,或本地 CA 证书缺失;换用http://代理可绕过 - 无响应或超时 → 检查
composer config -g --list | grep -E "(http|https)-proxy",确认两行都存在且格式正确
http.timeout 要设对地方,不然白调
http.timeout 控制的是单次 HTTP 请求总耗时(DNS + TLS + 响应头),默认仅 60 秒,对大包或弱网明显不够。但它只在真正发请求时起作用——Resolving dependencies 阶段卡住,根本不是 timeout 能解决的,那是 DNS 问题。
- 卡在
Resolving dependencies:测 DNS,改/etc/resolv.conf或 hosts,或用手机热点验证 - 卡在
Downloading:才该调http.timeout,推荐设为 600 - 全局设置:
composer config -g http.timeout 600 - 临时调试更安全:
COMPOSER_HTTP_TIMEOUT=600 composer install -
process-timeout在这里完全无效,别混用
最易被忽略的点:代理配对、镜像 URL 末尾斜杠、以及 Resolving dependencies 根本不走 HTTP 层——这三个地方出错,所有后续操作都是徒劳。











