输出不对说明配置未成功,必须为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}格式,常见原因:键名错(如repos.packagist)、缺type值composer、URL末尾无/,三者缺一即静默回退官方源。

composer config -g repo.packagist 输出不对,说明根本没配成功
运行 composer config -g repo.packagist,输出必须是形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON,或至少是带末尾斜杠的 HTTPS URL 字符串。如果返回空、null、Key not found,或者还是 https://packagist.org,那就不是“镜像慢”,而是配置压根没写进去。
常见失效原因有三个,漏一个就静默回退:
-
repo.packagist键名写错:比如repos.packagist(多 s)、packagist(少repo.)、Repo.Packagist(大小写混用)——Composer 完全忽略,不报错 - 中间漏掉
composer这个 type 值:命令必须是composer config -g repo.packagist composer https://...,少这个词,就不是合法 repository 配置 - URL 缺少末尾斜杠:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌——会导致请求/packages.json时拼成/composerpackages.json,404 后自动 fallback
curl 测试镜像地址返回 404 或超时,说明源本身不可用
别只信 composer install -vvv 日志里有没有 mirrors.,先手动验证镜像站是否活着:
执行 curl -sS https://mirrors.aliyun.com/composer/packages.json | head -n1。如果返回空、Not Found 或卡住超过 5 秒,说明当前镜像临时下线或 DNS 解析异常。
国内主流镜像稳定性有差异,可快速切换备用源:
- 华为云(目前较稳):
composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/ - 腾讯云:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 清华源(教育网优先):
composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
注意:每条命令都必须带 composer type 和末尾斜杠,否则无效。
composer install -vvv 日志里还是 packagist.org,但 config 显示正确
这通常不是配置问题,而是 Composer 在读旧缓存或旧 composer.lock:
-
composer clear-cache必须执行,否则它可能复用本地缓存的元数据(含旧 URL) - 删掉项目下的
vendor/和composer.lock——composer.lock里硬编码了包的 dist URL,哪怕你换了镜像,它仍会照着旧地址去下载 - 再跑
composer install -vvv,盯着日志里第一行 HTTP 请求,确认 URL 是mirrors.aliyun.com或你设的其他镜像域名
如果仍出现 packagist.org,说明 clear-cache 没清干净,或你运行命令的用户和实际执行 composer install 的用户不一致(比如宝塔用 www 用户,你却在 root 下配的全局配置)。
HTTPS 握手失败或证书校验不过,Composer 自动降级回官方源
现象是:composer diagnose 提示 SSL/TLS 相关 WARNING,或 composer update 卡在 “Loading composer repositories…” 几十秒后跳回 packagist.org,且 curl -I https://mirrors.aliyun.com/composer/packages.json 也失败。
根本原因可能是:
- PHP 的 cURL 版本太低(
version_number < 0x073a00,即低于 7.58.0),SNI 支持不稳定 - 系统 OpenSSL 证书过期,或企业网络中间件劫持 HTTPS 请求
临时验证方法:export COMPOSER_DISABLE_TLS=1 && composer update。如果这时能走镜像,基本锁定 TLS 问题。长期方案是升级 PHP/cURL,或让运维部署内部证书白名单——不建议长期关闭 TLS 校验。


















