process-timeout对“Connection refused”无效,因其仅控制命令总耗时,不干预TCP连接阶段;真正生效的是COMPOSER_NETWORK_TIMEOUT(透传curl超时)、换镜像源和clear-cache三步必须同步执行。

直接改 COMPOSER_NETWORK_TIMEOUT 和镜像源,其他参数基本无效——process-timeout 控制的是整个命令生命周期(含解压、脚本执行),对“无法建立连接”这类底层网络错误完全不生效。
为什么 process-timeout 对 “Connection refused” 没用
这个错误本质是 curl 在 TCP 连接阶段就失败了(比如 DNS 解析卡住、目标端口拒绝连接、防火墙拦截),而 process-timeout 是 Composer 主进程的总耗时上限,它不会干预单次 HTTP 请求的底层超时逻辑。真正管用的是 COMPOSER_NETWORK_TIMEOUT,它直接透传给 curl 的 CURLOPT_TIMEOUT 选项。
-
process-timeout默认 300 秒,调到 1800 秒也救不了 DNS 卡在 290 秒的请求 -
COMPOSER_NETWORK_TIMEOUT默认仅 60 秒,国内常见 DNS 波动或 TLS 握手慢,60 秒根本不够 - 验证方式:运行
curl -v https://mirrors.aliyun.com/composer/packages.json,看卡在* Connected to还是* TLS handshake阶段
必须配的三件事:镜像 + 环境变量 + 清缓存
光调超时没用,80% 的 “Connection refused” 实际是连不上 packagist.org 导致的回退失败。换镜像不是可选项,是前提。
- 设阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 临时加网络超时:
COMPOSER_NETWORK_TIMEOUT=300 composer install --retries=5 - 清缓存防污染:
composer clear-cache(尤其之前失败过,缓存里可能存了半截响应) - 注意:
--retries=5仅 Composer 2.2+ 支持;低于此版本只能靠环境变量重试,但效果弱很多
Git 仓库报错别瞎调 Composer 超时
如果错误出现在类似 Cloning into 'vendor/some/package'... 阶段,说明 Composer 正在调系统 git clone,此时所有 Composer 的 HTTP 超时配置全部失效。
- 查 Git 自身超时:
git config --get http.timeout,默认是 0(无限),但某些企业网络会强制中断长连接 - 手动设 Git 超时:
git config --global http.timeout 300 - 禁用低速限制(防假死):
git config --global http.lowSpeedLimit 0 - HTTPS 协议下还受系统 CA 影响,可临时指定:
git config --global http.sslCAInfo /path/to/cacert.pem
容易被忽略的 DNS 和 OpenSSL 问题
即使镜像和超时都配了,仍报 “Could not resolve host” 或静默失败,大概率是本地环境没配好。
- DNS 不可靠:用
dig mirrors.aliyun.com测试解析,若慢或失败,改系统 DNS 为8.8.8.8或223.5.5.5 - OpenSSL 不支持 TLS 1.2:运行
php -r "print_r(stream_get_transports());",确认输出含ssl和tls;否则 PHP 编译缺失 TLS 支持,连现代镜像站都会静默断开 - 时间不同步也会导致 TLS 握手失败:
date看系统时间是否准确,误差 > 3 分钟就会被服务器拒绝











