答案是DNS解析失败或网络策略拦截导致,需先用ping、curl验证连通性,再正确配置镜像源(键名repo.packagist、type值composer、URL末尾带/)、清缓存并排除代理与防火墙干扰。

Connection refused 或 Could not resolve host 这类错误,90% 不是 Composer 坏了,而是请求压根没发出去——DNS 解不出来、防火墙拦了 443 端口、镜像配置写错,或者系统代理在捣鬼。
为什么 composer install 直接报连接拒绝?
根本不是 Composer 版本或 PHP 扩展问题,而是网络链路卡在最底层:
-
ping packagist.org返回unknown host→ DNS 失效,换8.8.8.8或114.114.114.114 -
curl -I https://packagist.org卡住或报Failed to connect→ 防火墙、杀毒软件(如火绒/360)、企业中间人代理在拦截 - 浏览器能打开
https://packagist.org,但 Composer 报错 → 很可能是 HTTPS 证书校验失败,需配cafile或临时关掉杀软 - 公司/学校网络下,
packagist.org和github.com常被统一策略屏蔽,切手机热点一试便知
怎么正确设置阿里云/清华镜像?三要素缺一不可
命令写错一个字符就等于没配,且静默失效,不报错也不提示:
- 键名必须是
repo.packagist(注意是repo单数,不是repos或packagist.org) - 中间的
composer是type值,不是可选参数,漏掉就会 fallback 到官方源 - URL 必须是 HTTPS 且末尾带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会拼成/composerpackages.json导致 404)
正确命令:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否生效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config -g repo.packagist
输出应为类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};如果为空、null 或仍是 https://packagist.org,说明根本没写进去。
项目级配置比全局更可靠,尤其在 CI 和团队协作中
全局配置只对当前 shell 用户生效,CI 流水线常以 www 或 runner 用户运行,权限不一致就失效。项目级配置写进 composer.json,拉代码即生效:
- 进项目根目录,运行:
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/(不加-g) - 该命令会自动追加到
repositories字段,不会覆盖已有私有源(前提是原repositories是对象结构) - 如果
composer.json已存在"repositories": [],手动改数组可能误删私有源,建议先备份再操作 - 改完务必执行:
composer update --lock,否则composer.lock仍记录旧源地址
换镜像后还是连不上?清缓存和旧文件是关键动作
Composer 会优先读本地缓存和 composer.lock 中记录的元数据地址,哪怕你刚配好镜像,它也可能还在用旧 URL:
- 必须执行:
composer clear-cache(清除所有缓存,包括已失效的地址快照) - 删掉项目下的
vendor/和composer.lock - 再跑:
composer install -vvv,观察日志里是否出现mirrors.aliyun.com或mirrors.tuna.tsinghua.edu.cn - 如果日志里仍出现
packagist.org,说明repositories被硬编码在composer.json里,它的优先级高于全局配置,得手动删或改成可用地址
真正容易被忽略的是:镜像只接管元数据请求(查包、读 composer.json),不解决 git clone 卡死问题——那得调 Git 自身超时,跟 Composer 配置无关。

















