报错“Connection refused”本质是系统层连通性问题,需依次排查DNS解析、镜像配置格式、CA证书有效性及项目级repositories覆盖全局配置。

Connection refused 或 Failed to connect to packagist.org port 443: Connection refused 这类报错,不是 Composer 坏了,也不是你写的 composer.json 有语法错误——它压根没发出去,或者发出去后对方根本没应答。直接查系统层连通性。
先确认是不是 DNS 解析失败
运行 ping packagist.org,如果返回 unknown host,说明 DNS 没通。这时候换镜像源、调超时、清缓存全无效。
- Linux/macOS:编辑
/etc/resolv.conf,加一行nameserver 8.8.8.8 - Windows:进“网络适配器设置 → IPv4 属性 → 手动填 DNS:8.8.8.8
- 验证:再跑一次
ping packagist.org,能通了再继续
镜像配置写对了吗?漏斜杠、少 type 就等于没配
运行 composer config -g repo.packagist,输出必须是完整 JSON 对象,形如:{"type": "composer", "url": "https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9"}
- 键名只能是
repo.packagist(不是repos.packagist、repositories.packagist) -
type字段必须显式写成"composer",漏掉就静默忽略 -
url必须以https://开头,且末尾带/(https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9✅,https://mirrors.aliyun.com/composer❌) - 输出如果是
null、空字符串、或仍是https://packagist.org,说明根本没写进去
CA 证书过期会导致 TLS 握手卡死,不报 SSL 错误只卡在 “Loading…”
即使用了镜像,curl -v https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9 卡在 * TLS handshake 阶段,大概率是 PHP 的 CA 证书链失效。
- 去
https://curl.se/ca/cacert.pem下载最新cacert.pem - 在
php.ini中统一设两处:openssl.cafile=/path/to/cacert.pemcurl.cainfo=/path/to/cacert.pem - 重启 PHP(CLI 模式也要 reload,比如
sudo systemctl restart php-fpm或重开终端)
项目级配置会彻底屏蔽全局镜像,尤其在宝塔/CI/Docker 里
只要项目根目录的 composer.json 里有 "repositories" 字段(哪怕空数组 "repositories": []),全局配置 repo.packagist 就完全失效——不是优先级低,是压根不读。
- 进项目目录,删掉
composer.json里的"repositories"字段,或改成"repositories": {} - 然后运行
composer config repo.packagist composer https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9(不加-g) - 它会自动写进
composer.json的"repositories"里,key 固定为"packagist" - 注意:如果原
composer.json是"repositories": [],得先手动改成{}再执行,否则报错
真正卡住的地方往往不在 Composer 日志里,而是在 DNS、证书、权限归属这些底层环节。别一上来就改 http-timeout 或重装 PHP,先让 curl -v <a href="https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9">https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9</a> 走通再说。


















