必须同时配置http-proxy和https-proxy,且https-proxy值必须以http://开头;因Composer所有仓库全走HTTPS,仅配http-proxy会导致HTTPS请求静默直连而卡在Loading composer repositories或报cURL error 28。

私有代理配不成功,90% 是因为 https-proxy 没设对——Composer 所有仓库请求(包括 Packagist、GitHub、GitLab)全走 HTTPS,只配 http-proxy 等于没配。
为什么 composer install 卡在 “Loading composer repositories”
这不是网络慢,是 Composer 根本没发出去任何包下载请求,纯粹卡在元数据拉取环节。它试图用 https-proxy 建 CONNECT 隧道,但该字段缺失或格式非法,结果静默 fallback 直连,然后超时或卡死。
-
https-proxy必须存在,且值必须以http://开头(哪怕你的代理监听的是 8443 TLS 端口) - 填成
https://127.0.0.1:8080或漏掉协议头(如127.0.0.1:8080),Composer 会直接忽略该字段 - 只运行
composer config -g http-proxy http://127.0.0.1:8080,不配https-proxy,就一定会卡住
NTLM 代理环境下必须加中转层
公司 Windows 域环境常见 407 Proxy Authentication Required 错误,这不是密码填错了,是 Composer 原生不支持 NTLM 协议。
- 不能靠改
auth.json或加http-basic绕过——那是给私有仓库用的,和出站代理无关 - 必须部署中转代理:Windows 推荐
cntlm或px,监听127.0.0.1:3128并处理 NTLM 认证 - 再把 Composer 的两个 proxy 字段都指向这个本地地址:
http://127.0.0.1:3128 - 验证中转是否生效:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果也报 407,说明中转没跑起来
镜像和代理不能共存
二者作用层面冲突:镜像改的是请求地址(packages.json 走国内 CDN),代理改的是流量路径。同时配置,Composer 会优先用镜像,完全忽略 http-proxy 和 https-proxy。
- 国内用户卡住,90% 是混用了镜像和代理;先清空镜像:
composer config -g --unset repo.packagist - 确认只留 proxy 配置后,用
composer config -g --list | grep -E "(http|https)-proxy"检查两行都存在 - 再跑
composer install -n -vvv,日志里看到Proxy CONNECT才算真正启用 - 代理调通后再决定要不要切回镜像——多数内网 VPC 场景下,DNS 解析慢 + TLS 握手卡海外节点,配代理反而多一层故障点
最容易被忽略的一点:用户名或密码含 @、/、: 必须 URL 编码,比如 pa@ss/word 得写成 pa%40ss%2Fword;用 php -r "echo rawurlencode('pa@ss/word');" 可快速生成。漏掉这步,代理连接会静默失败,没有任何提示。


















