真实生效的镜像 URL 是 composer -vvv 日志中第一个 GET 请求地址,如 https://mirrors.aliyun.com/composer/;配置项 repo.packagist 仅是候选,实际行为以日志为准。

直接看 composer install -vvv 日志里的第一个 GET 请求地址,才是 Composer 实际发起下载的镜像 URL;配置项只是“可能用到”,不是“正在用”。
查当前真实请求地址:用 -vvv 看日志
Composer 不会告诉你“我现在走哪个源”,它只在 verbose 日志里暴露真实行为。运行:
composer -vvv show monolog/monolog --no-ansi
然后在输出中找第一行类似这样的内容:
Downloading https://mirrors.aliyun.com/composer/p2/monolog/monolog.json
这个 https://mirrors.aliyun.com/composer/ 就是此刻真正生效的镜像根地址。
- 如果看到的是
https://packagist.org/,说明镜像没生效,哪怕你配了也白配 - 如果 URL 末尾是
/p2/...或/packages.json,说明请求已发出,镜像服务端至少能响应 - 注意:有些镜像(如清华源)会在元数据缺失时 302 跳转回官方源,日志里会显示跳转后的地址,那才是真实终点
查配置是否写对:重点盯 repo.packagist 键名
Composer 7+ 只认 repo.packagist 这个键(单数 repo,不是 repos),旧教程里写的 repos.packagist 或 repositories.packagist 已失效。
- 查全局配置:
composer config -g repo.packagist—— 返回 JSON 就是当前全局镜像;空或报错说明走默认https://packagist.org - 查项目级配置:
composer config repo.packagist(不加-g)—— 项目根目录下运行,优先级高于全局 - 别信
composer config -l | grep repositories,它输出的是原始 JSON 字符串,repo.packagist字段容易被折叠或淹没
为什么配置写了却还是走官方源?三个常见断点
镜像配置不是“写了就生效”,它会被以下任一条件直接屏蔽:
- 项目
composer.json里存在"repositories"字段(哪怕值是[]或{}),全局repo.packagist就彻底失效 - URL 缺少结尾斜杠:
https://mirrors.aliyun.com/composer是错的,必须是https://mirrors.aliyun.com/composer/ - 本地缓存没清:改完配置后不执行
composer clear-cache,Composer 仍按旧缓存里的packages.json算依赖,根本不会发新请求
验证镜像站本身是否可用:绕过 Composer 直接测接口
如果日志里地址是对的,但卡在 Loading composer repositories,问题大概率出在镜像服务端,而不是你本地。
- 手动
curl -I https://mirrors.aliyun.com/composer/packages.json,看是否返回200或304 - 华为云当前有效地址是
https://repo.huaweicloud.com/repository/php/,不是旧版mirrors.huaweicloud.com - 阿里云地址仍是
https://mirrors.aliyun.com/composer/;腾讯云镜像自 2025 年起已停更,别再试
最麻烦的其实是缓存路径和镜像重定向——~/.composer/cache/repo/https---mirrors.aliyun.com-composer 这个目录删不干净,或者镜像服务悄悄把 /p2/ 请求 302 到官方源,都会让“看着配对了,实际没走”的问题反复出现。











