直接换镜像源+清缓存+强制禁用keep-alive可解决95%的connection reset by peer报错,因该错误实为nat/防火墙主动断开tcp连接后curl复用失效socket所致,而非composer本身故障;需严格配置镜像url末尾带/、使用https、设置cafile路径,并通过curl_options="--no-keepalive"强制新建连接。

直接换镜像源 + 清缓存 + 强制禁用 keep-alive,基本能解决 95% 的 Connection reset by peer 报错。这不是 Composer 崩了,而是底层 TCP 连接被中间设备(NAT/防火墙/代理)主动断开后,cURL 还在复用它。
为什么 curl -I 能通但 composer install 报 reset
因为 curl -I 是单次请求,而 Composer 默认复用 cURL 的 keep-alive 连接。一旦 NAT 设备在空闲期发 RST,Composer 下次复用该 socket 就会立刻失败,报错却只显示 Connection reset by peer,不带 HTTP 状态码或具体原因。
- 现象:前几次
composer install成功,某次突然卡住或报错;composer diagnose显示 HTTPS connectivity OK - 验证方式:加
-vvv参数运行,看日志里是否出现* Connection #X to host mirrors.aliyun.com left intact后紧接着失败 - 别信
http-timeout配置——它只管响应超时,不管连接是否已死
怎么临时绕过 reset 问题
让每次请求都新建 TCP 连接,彻底避开复用失效连接的风险。Composer 不提供开关,但可通过环境变量干预 cURL:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:
CURL_OPTIONS="--no-keepalive" composer install - Windows cmd:
set CURL_OPTIONS=--no-keepalive && composer install - PowerShell:
$env:CURL_OPTIONS="--no-keepalive"; composer install - 注意:
--no-keepalive会禁用Connection: keep-alive头,并在请求结束后立即关闭 socket
镜像源配置最容易踩的三个坑
很多“重置”其实是镜像 URL 写错,导致请求发到错误地址后被网关拦截或返回 403/404,最终表现为 reset:
-
repo.packagist键名不能写成repos.packagist或packagist.org,否则 fallback 到官方源 - URL 必须以
/结尾:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会拼出/composerpackages.json导致 404) - 必须用 HTTPS:
http://源在新版 Composer 中默认被拒绝,不会提示,而是静默失败 - 推荐当前实测稳定的镜像:
https://mirrors.aliyun.com/composer/、https://mirrors.huaweicloud.com/repository/php/
CA 证书路径不一致也会伪装成 reset
当 TLS 握手失败(比如证书链校验不过),某些中间设备会伪造 RST 包,让你误以为是网络层问题。典型表现是 curl -v 卡在 * TLS handshake 或报 tlsv1 alert protocol version:
- 检查
php.ini中curl.cainfo和openssl.cafile是否指向同一份 CA 证书文件 - 路径必须是绝对路径,且文件存在可读:
/etc/ssl/certs/ca-certificates.crt或C:\php\extras\ssl\cacert.pem - 企业内网需额外配置:
composer config -g cafile /path/to/company-ca.crt
真正麻烦的不是换源或加参数,而是多个因素叠加:镜像 URL 少了个 /,CA 路径没对齐,又开着 keep-alive —— 这时候报错看起来像随机故障,其实每一步都有确定性原因。










