必须同时配置http-proxy和https-proxy,且https-proxy值必须以http://开头;否则HTTPS请求静默直连,导致“Loading composer repositories”卡死。

https-proxy字段必须填http://开头的地址
Composer 对 HTTPS 请求不走 http-proxy,而是强制要求 https-proxy 字段存在且值以 http:// 开头——哪怕你的代理服务监听的是 TLS 端口(如 443),也必须写成 http://127.0.0.1:443。填 https:// 或漏掉协议头,Composer 会静默忽略该字段,等效于没配。
常见错误写法:
-
https://127.0.0.1:7890→ 静默失效 -
127.0.0.1:7890→ 静默失效 -
http://user:pa@ss/word@127.0.0.1:8080→ @ 和 / 未 URL 编码,解析失败
正确写法示例:
- 无认证:
http://127.0.0.1:7890 - 带认证(密码
pa@ss/word):http://user:pa%40ss%2Fword@127.0.0.1:8080(用php -r "echo rawurlencode('pa@ss/word');"快速编码)
必须同时配置http-proxy和https-proxy
Composer 把 HTTP 和 HTTPS 请求完全分路由:前者走 http-proxy,后者只认 https-proxy 并发起 CONNECT 隧道。Packagist 全量接口(https://packagist.org/packages.json、https://api.github.com 等)都是 HTTPS,漏掉任一字段,对应协议的请求就会 fallback 直连——结果就是卡在 Loading composer repositories,无报错、无重试、只有超时。
验证是否生效的命令:
-
composer config -g --list | grep -E "(http|https)-proxy"→ 必须输出两行,且格式合规 -
composer install -n -vvv 2>&1 | grep "Proxy CONNECT"→ 有该日志才说明隧道真正建立
NTLM 代理环境下不能直接配 https-proxy
Windows 域环境常见的 NTLM 代理(如公司统一出口网关)会返回 407 Proxy Authentication Required,因为 Composer 原生不支持 NTLM 认证。此时无论怎么填 http-proxy 或 https-proxy 都无效。
解决路径是引入中转层:
- Windows 推荐
cntlm或px,监听127.0.0.1:3128并处理 NTLM 认证 - 然后把 Composer 的两个代理字段都指向中转地址:
http://127.0.0.1:3128 - 验证中转是否工作:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,若仍报 407,说明中转没配通
镜像和代理不能共存
一旦设置了 repo.packagist 镜像(如阿里云源),Composer 就会跳过所有代理配置——http-proxy 和 https-proxy 字段被完全忽略。国内用户卡住的 90%,根源就在这里。
要启用代理,第一步永远是清空镜像:
composer config -g --unset repo.packagist- 再运行
composer config -g http-proxy http://...和composer config -g https-proxy http://...
注意:镜像改的是元数据请求地址(packages.json),代理改的是流量转发路径,二者作用层面不同、互斥,无法叠加使用。











