答案是系统级连接被拦截或降级所致,需据错误关键词定位DNS、TLS、代理或防火墙问题:用ping查DNS、curl -v看卡点、换镜像源并清缓存、禁用secure-http仅限调试。

绝大多数“网络策略导致的 Composer install 报错”根本不是 Composer 的问题,而是系统级连接被拦截或降级——直接看错误关键词就能定位是 DNS、TLS、代理还是防火墙在作祟。
报 “Connection refused” 或 “cURL error 7” 怎么办
这类错误说明请求压根没发出去,或者发出去后对方没响应。它和 composer.json 里的配置无关,也和 PHP 扩展是否开启无关(只要 php -m | grep curl 能看到 curl 就行)。
- 先验证 DNS:运行
ping packagist.org,如果返回unknown host,说明 DNS 解析失败,该换 DNS(比如设为8.8.8.8),而不是调composer config - 确认是否用了镜像:运行
composer config -g repo.packagist,输出必须是https://mirrors.aliyun.com/composer/(注意是https,阿里云已停用 HTTP) - 换源后必须清缓存:
composer clear-cache,否则旧失败记录还在,重试照样走原地址 - 企业内网若走中间人代理,会静默触发连接拒绝;可临时验证:
composer config -g secure-http false+composer config -g cafile /dev/null(仅调试)
报 “Connection timed out” 或卡在 TLS handshake
这类错误发生在系统 DNS 查询或 TCP 建连阶段。http.timeout 参数完全无效——它只管 HTTP 响应头返回时间,不参与解析域名或握手。
- 立刻改 DNS:Linux/macOS 编辑
/etc/resolv.conf加nameserver 8.8.8.8;Windows 在网络适配器里手动设置 - 验证是否被策略拦截:运行
curl -v https://mirrors.aliyun.com/composer/,看卡在* Connected to还是* TLS handshake - 若卡在 TLS,强制走 IPv4:
CURL_IPRESOLVE=4 composer install(Linux/macOS) - 别信
composer.json里的repositories——它优先级低于全局配置,且容易被 fallback 覆盖;必须用composer config -g repo.packagist全局设
报 “Could not resolve host” 或 “SSL certificate problem”
这通常是防火墙主动拦截 HTTPS 请求,或中间设备篡改了证书链。Composer 安全通告源(composer/security-advisories)固定走 GitHub,不走 Packagist 镜像,所以设镜像对它无效。
- 先绕过安全检查验证网络通路:
composer audit --no-dev --skip-unstable,再跑composer install --no-audit(注意:该 flag 自 Composer 2.5+ 起仅在 CI 中允许,且需显式启用config.allow-plugins.composer/audit) - 禁用 TLS 校验仅限调试:
composer config -g secure-http false,但生产环境绝不可留 - 若公司用自签名 CA,把证书加进系统信任库,再执行
composer config -g cafile /path/to/company-ca.crt - 不要删
composer.lock后不跑composer install——漏洞信息缓存在 lock 文件里,重生成 lock 才会刷新校验结果
真正难处理的从来不是报错本身,而是策略拦截常不报错:它可能静默丢包、截断 TLS 握手、或只放行特定 User-Agent。最有效的排查方式永远是用 curl -v 直接复现 Composer 底层请求路径,而不是在 Composer 日志里猜。


















