应使用 curl -i 直接测试镜像真实地址(如 https://mirrors.aliyun.com/composer/packages.json)是否返回 200,而非依赖 composer diagnose;同时需用 composer config -g repo.packagist 确认全局配置生效,并通过 composer -vvv 命令观察实际请求域名验证镜像是否真正启用。

直接测,别信宣传页上的“最快节点”——实际速度取决于你本地网络出口、ISP路由策略和镜像源实时负载,不是配置文件里写个 URL 就完事的。
用 composer diag 快速验证当前镜像是否生效
这是最常被跳过的一步:很多人改了 composer.json 或全局 config,却没确认 Composer 真的在用镜像。执行:
composer diag
重点看输出里是否有类似:
Checking platform settings: OK Checking git settings: OK Checking http connectivity to packagist: OK Checking https connectivity to packagist: OK Checking HTTP proxy: OK Checking HTTP cache directory: OK Checking HTTPS cache directory: OK Checking composer.json: OK Checking disk free space: OK Checking pubkeys: FAIL Composer version: 2.7.6 PHP version: 8.3.10 PHP binary path: /usr/bin/php OpenSSL version: OpenSSL 3.0.13 30 Jan 2024 cURL version: 8.8.0 libcurl/8.8.0 OpenSSL/3.0.13 zlib/1.3.1 libssh2/1.11.0 nghttp2/1.62.1
注意最后一行 cURL version 后面的域名——如果显示的是 packagist.org,说明镜像没生效;若显示类似 mirrors.aliyun.com 或 packagist.phpcomposer.com,才表示已切换。
- 常见失效原因:
composer config -g repo.packagist composer https://xxx写错协议(漏了https://)、拼错域名、或被项目级composer.json中的repositories覆盖 - 临时绕过镜像测试原始源:加
-d repos.packagist.org=false参数,例如composer update -d repos.packagist.org=false
手动发起 HEAD 请求比 composer install 更准
composer install 受包依赖解析、缓存、压缩解压等干扰,不能真实反映 CDN 下载速度。真正测节点,应该直连镜像源的元数据端点:
curl -I -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\nsize_download: %{size_download}\n" -s https://mirrors.aliyun.com/composer/packages.json
对比不同镜像时,替换 URL 即可:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 阿里云:
https://mirrors.aliyun.com/composer/packages.json - 腾讯云:
https://mirrors.cloud.tencent.com/composer/packages.json - 华为云:
https://repo.huaweicloud.com/composer/packages.json - 清华源:
https://mirrors.tuna.tsinghua.edu.cn/composer/packages.json
关键看 time_starttransfer(DNS + TCP + TLS 握手 + 首字节返回时间),size_download 应稳定在 ~2MB 左右(packages.json 压缩后大小),若远小于此值,说明 CDN 返回了 302 或 403,没走通。
为什么 ping 和 traceroute 不可靠
ping 测的是 ICMP 包,而 Composer 走的是 HTTPS(TCP+TLS),路径可能完全不同;很多 CDN 对 ICMP 主动限速或丢包,但对 HTTPS 流量放行。更糟的是:
- 某些镜像(如华为云)会把
ping指向健康检测节点,而非实际文件分发节点 -
traceroute在跨运营商场景下常显示“* * *”,不代表不通,只是中间设备屏蔽了 ICMP TTL-exceeded - CDN 有 Anycast 和 GeoDNS,同一 IP 在不同地区解析到不同机房,
ping结果无法复现 Composer 实际请求路径
所以必须用 curl -I 或 wget --server-response 模拟真实 HTTP(S) 连接行为。
留意镜像同步延迟与 packages.json 缓存机制
所有中文镜像都不是实时同步,普遍有 5–30 分钟 lag。如果你刚发布了一个新版本包,发现镜像里查不到,不一定是速度问题,而是还没同步过来。验证方式:
- 访问镜像站首页(如
https://mirrors.aliyun.com/composer/),手动点击进入packages.json,看最后修改时间 - 对比官方源
https://packagist.org/packages.json的Last-Modified响应头 - Composer 默认会缓存
packages.json15 分钟(config.json中cache-files-ttl控制),想立刻刷新需加--no-cache
真正影响体验的,往往不是“哪个节点快”,而是“哪个镜像同步最及时 + 最少 503”。遇到频繁 Connection refused 或 Could not fetch packages.json,优先换镜像,而不是调优本地网络。










