composer代理必须同时配置http-proxy和https-proxy,缺一不可;https-proxy值须以http://开头且密码含特殊字符需url编码,否则https请求静默直连导致卡顿或curl error 35。

Composer 代理配不生效,90% 是因为只配了 http-proxy 却漏了 https-proxy——它俩必须成对出现,否则所有 HTTPS 请求(包括访问 Packagist)都会静默 fallback 到直连,卡在 “Resolving dependencies” 或报 cURL error 35。
为什么只执行 composer config -g http-proxy 没用
Composer 不读取系统级的 HTTP_PROXY 或 HTTPS_PROXY 环境变量,也不接受单边代理配置。它内部把 HTTP 和 HTTPS 流量严格分流:http-proxy 只处理纯 HTTP 请求(极少),https-proxy 才负责建立 CONNECT 隧道转发 HTTPS 流量(Packagist、GitHub 全部走这个)。漏掉任意一个,就等于没配。
- 常见现象:执行
composer install卡住、无报错、几小时不动;或报Failed to decode response、Connection refused - 验证命令必须同时看到两行:
composer config -g --list | grep -E "(http|https)-proxy" - 值必须是
http://开头(哪怕代理本身监听 HTTPS 端口),例如http://127.0.0.1:7890,不能写https://或省略协议 - 密码含
@、/、:必须 URL 编码,比如pa@ss/word→pa%40ss%2Fword
https-proxy 值填错的典型错误和修复
填错 https-proxy 是最隐蔽的失败原因:没有明确报错,但所有 HTTPS 请求都绕过代理直连,最终超时或被拦截。
- 错误写法:
https://127.0.0.1:7890、127.0.0.1:7890、http://user:pa@ss@127.0.0.1:7890(未编码) - 正确写法永远是:
http://user:pa%40ss%2Fword@127.0.0.1:7890 - 快速验证代理是否真通:运行
curl -x http://127.0.0.1:7890 -I https://packagist.org/packages.json,如果 curl 也失败,说明代理层本身有问题 - Windows 下若提示
Could not write to file,检查%APPDATA%\Composer\config.json目录权限,或改用管理员 CMD
腾讯云 CVM 上别硬配代理,直接切镜像更稳
你在腾讯云服务器上跑 composer install 卡住,大概率不是网络不通,而是 DNS 解析慢或 TLS 握手卡在海外节点。代理反而多一层故障点,镜像才是首选。
- 一键切换腾讯云官方镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 立刻清缓存:
composer clear-cache - 验证是否生效:
composer show laravel/framework --no-ansi | head -n 3,输出 URL 含mirrors.cloud.tencent.com即成功 - 注意:
https://mirrors.cloud.tencent.com/composer/末尾的/不能少,少了会报Invalid repository type - 如果项目
composer.json里写了repositories字段,它会覆盖全局镜像配置,得先删掉或注释掉
NTLM 代理(如公司域环境)根本没法直接配
Composer 原生不支持 NTLM 认证,设了 http-proxy 也会返回 407 Proxy Authentication Required。这不是你配错了,是它根本不认。
- 必须引入中转代理工具:比如
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM,再让 Composer 连这个本地地址 - 临时验证是否是 NTLM 问题:用
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果 curl 也报 407,说明中转层没配好 - 别指望改
composer.json或环境变量能绕过去——Composer 明确忽略HTTP_PROXY
真正容易被忽略的是:代理配置后不验证、镜像配置后不清缓存、项目级 repositories 覆盖全局设置——这三处一出错,前面所有操作全白干。











