composer正向代理必须同时配置http-proxy和https-proxy两个字段,且值均须为http://协议开头;缺一或协议错误会导致composer install静默卡在“loading composer repositories”。

Composer 正向代理配置不是“配了就能用”,必须同时写入 http-proxy 和 https-proxy 两个字段,且值都必须是 http:// 协议开头——漏一个或协议写错,composer install 就会卡在 “Loading composer repositories” 无报错、无提示、纯静默失败。
为什么只设 http-proxy 仍连不上 Packagist
Packagist、GitHub 等所有主流源全量走 HTTPS,而 Composer 对代理路由是严格分协议的:http-proxy 只处理 http:// 请求,https-proxy 才负责建立 CONNECT 隧道转发 HTTPS 流量。漏掉后者,请求直接 fallback 到直连,最终超时或返回 cURL error 35。
-
https-proxy的值必须是http://127.0.0.1:8080这类格式,哪怕你的代理监听的是 TLS 端口(如https://127.0.0.1:8443),Composer 也不支持,必须换 HTTP 协议的代理地址 - 认证信息需 URL 编码:密码含
@、/、:时,例如pa@ss/word要写成pa%40ss%2Fword,可用php -r "echo rawurlencode('pa@ss/word');"快速生成 - Windows 下若报
Could not write to file,检查%APPDATA%\Composer\config.json目录是否存在且当前用户有写权限
composer config -g 必须加 -g 且两条命令都执行
不加 -g(即 --global)只会改当前项目下的 composer.json,换目录就失效;只执行一条命令,比如只设 http-proxy,https-proxy 缺失,HTTPS 请求照样失败。
- 正确写法(两行缺一不可):
composer config -g http-proxy http://127.0.0.1:8080composer config -g https-proxy http://127.0.0.1:8080 - 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",输出里必须同时出现两行,且 URL 格式正确 - 别手改
~/.composer/config.json,容易格式出错或键名拼错;用composer config命令最安全
腾讯云/CVM 环境下优先切镜像,不是配代理
你在腾讯云服务器上跑 composer install 卡住,90% 不是网络不通,而是 DNS 解析慢或 HTTPS 握手卡在海外节点。代理只是绕路,镜像才是直连加速。
- 推荐命令(注意三个硬性条件):
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
——必须带-g、键名是repo.packagist(单数)、URL 以https://开头且末尾有/ - 配完立刻清缓存:
composer clear-cache - 验证是否生效:
composer config -g repo.packagist输出应为完整 JSON,且url字段值含mirrors.cloud.tencent.com - 若项目根目录存在
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,说明中转层没配好 -
HTTP_PROXY环境变量对 Composer 完全无效,别指望靠它绕过
真正容易被忽略的点是:代理配置后不验证、镜像配置漏掉 / 或写错键名、项目级 repositories 覆盖全局设置——这些都会导致你以为配好了,其实根本没生效。











