90%的“connection refused”源于网络链路问题而非composer故障:dns失败、防火墙/代理拦截或镜像配置错误;composer 2.2+需用repositories.packagist.org.type和.url(末尾带/),并清除缓存、检查项目级配置覆盖。

直接结论:90% 的 “Connection refused” 不是 Composer 坏了,而是请求根本没发出去——要么 DNS 解析失败,要么防火墙/代理拦在了 TCP 层,要么镜像配置被忽略或写错。
composer config -g repo.packagist 返回空或仍是 packagist.org?
这说明全局镜像根本没生效。Composer 2.2+ 已废弃 repo.packagist 键名,继续用它设置等于白写。
- 正确写法(两行缺一不可):
composer config -g repositories.packagist.org.type composer+composer config -g repositories.packagist.org.url https://mirrors.aliyun.com/composer/ - URL 必须以
/结尾,否则会拼出/p2/xxx.json这类错误路径,返回 404 或 SSL 异常 - Windows 用户若提示权限错误,需用管理员 CMD 运行;macOS/Linux 用户注意别混用
--global和-g - 验证是否真生效:
composer config -g repositories.packagist.org.url应输出镜像地址,而非https://packagist.org
curl -I https://mirrors.aliyun.com/composer/packages.json 卡住?
这说明问题不在 Composer 配置,而在系统网络链路本身——DNS、防火墙、代理或 TLS 握手任一环节断了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先跑
ping packagist.org:返回unknown host→ 换 DNS(如8.8.8.8) - 再跑
curl -I https://packagist.org:卡在* Connected to或报Failed to connect→ 防火墙拦截或代理失效 - 企业内网常见情况:杀毒软件(360/火绒)或 Windows Defender 防火墙劫持 HTTPS 流量,临时关闭可验证
- 某些代理(Clash/Fiddler)监听
127.0.0.1,但被本地防火墙当成可疑出站连接拦截,此时应取消代理:unset http_proxy https_proxy(Linux/macOS)或set http_proxy= && set https_proxy=(Windows)
换镜像后 composer install 还报 Connection refused?
大概率是缓存没清、项目级配置覆盖、或 Git 克隆阶段被卡住,和 HTTP 元数据请求无关。
- 必须执行
composer clear-cache:旧缓存可能仍指向 packagist.org,重试时复用失败快照 - 检查项目根目录
composer.json是否硬写了"repositories"字段:只要存在,就会完全屏蔽全局镜像,哪怕内容是{}或{"packagist.org": false} - 删掉
vendor/和composer.lock再试:lock 文件记录的是源地址,不清掉它,Composer 仍按原始源解析 -
http-timeout参数只控制 HTTP 元数据请求(如packages.json下载),对后续git clone完全无效;真正影响整体超时的是process-timeout,建议设为1800
composer diagnose 显示 cURL error 60 或 certificate verify failed?
这不是连不上,是 PHP OpenSSL 找不到可信 CA 证书,或系统时间偏差太大。
- 查证书路径:
php -r "print_r(openssl_get_cert_locations());",重点关注default_cert_file - 若路径为空或文件不存在(如 CentOS 容器里
/etc/ssl/certs/ca-certificates.crt没生成),需手动下载:curl -sS https://curl.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem,再在php.ini中加openssl.cafile=/usr/local/etc/openssl/cert.pem - 运行
date看系统时间:偏差超过 5 分钟,TLS 握手必失败;CentOS 上可用sudo ntpdate -s time.nist.gov校准 - 临时绕过验证(仅调试):
composer config -g secure-http false+composer config -g cafile /dev/null,但生产环境禁用
真正卡住的地方,往往是你以为“已经配好”的镜像,其实被 composer.json 里的 repositories 覆盖了,或者缓存没清干净就急着重试——盯着 curl -I 和 composer config -g 的输出,比反复 composer update 更快定位问题。










