composer install卡在“loading composer repositories”是因未同时配置http-proxy和https-proxy,导致https请求回退直连而被拦截;必须用composer config -g分别设置二者为相同http://地址,且代理需支持connect隧道。

Composer 代理必须同时配 http-proxy 和 https-proxy 才能生效,只配一个等于没配——因为 Packagist 全量走 HTTPS,而 Composer 对这两类协议是严格分离路由的。
为什么 composer install 卡在 “Loading composer repositories”
这不是 Composer 慢,是它默认直连 https://repo.packagist.org 时 TCP 建连或 TLS 握手失败。现象是无报错、无进度、长时间挂起。常见诱因:
- 漏配
https-proxy,导致 HTTPS 请求 fallback 到直连,被防火墙或运营商拦截 -
https-proxy值写成https://127.0.0.1:8080或不带协议(如127.0.0.1:8080),Composer 静默忽略该配置 - 代理进程未启动,或端口填错(比如 Clash 默认 HTTP 代理端口是
7890,不是1080) - 公司 NTLM 代理环境下直接配
http-proxy,结果返回407 Proxy Authentication Required,Composer 不支持原生 NTLM
composer config -g 代理配置的正确写法
全局配置最稳,写入 ~/.composer/config.json(Windows 是 %APPDATA%\Composer\config.json),所有项目自动继承:
composer config -g http-proxy http://127.0.0.1:7890 composer config -g https-proxy http://127.0.0.1:7890
注意点:
- 两个地址必须一致,且协议头只能是
http://(哪怕代理本身监听 HTTPS 端口) - 含特殊字符的密码需 URL 编码,例如密码
pa@ss/word→pa%40ss%2Fword,可用php -r "echo rawurlencode('pa@ss/word');"快速生成 - 若提示
Could not write to file,检查%APPDATA%\Composer目录是否存在且当前用户有写权限 - 旧版 Composer(socks5://,如用 Clash TUN 模式,确保版本 ≥2.2 再配
socks5://127.0.0.1:7891
用 Fiddler 或 curl 验证代理是否真正通路
别信 composer install 的静默表现,直接绕过 Composer 测试代理链路:
- 用
curl模拟请求:curl -x http://127.0.0.1:7890 -I https://packagist.org/packages.json。成功应返回200 OK;若报407,说明是 NTLM 问题,需加 cntlm/px 中转;若报Connection refused,说明本地代理没开或端口错 - 用 Fiddler 的 Composer 功能:拖一个已捕获的 HTTPS 请求进 Composer,改
Host为packagist.org,发包看响应。Fiddler 能直观显示 CONNECT 隧道是否建立成功、TLS 是否握手通过 - 临时禁用 Composer SSL 校验(仅调试):
composer config -g secure-http false,排除证书信任问题干扰(但生产环境绝不可留)
代理配置里最容易被忽略的,是 https-proxy 的协议头强制要求和 NTLM 场景下必须引入中转层——这两点不处理,其他所有操作都是徒劳。











