“connection reset by peer”是中间设备(防火墙、代理、nat网关或旧版openssl)主动中断tcp连接所致,并非composer故障;需先运行composer diagnose和curl -v https://packagist.org/packages.json确认tls握手失败,再检查openssl版本、ca证书路径或代理配置。

“Connection reset by peer”不是 Composer 错了,是连接被中间设备掐断
这个错误根本不在 Composer 控制范围内——它只是在发起 HTTPS 请求时,TCP 连接被路由器、企业防火墙、NAT 网关甚至旧版 OpenSSL 主动终止。现象是 composer install -vvv 卡在某个 HTTPS URL 后无响应,或直接报 cURL error 35 或 cURL error 7。别改 composer.json,先验证是不是网络链路本身被策略拦截。
用 curl -v 直接测 TLS 握手是否成功
这是最准的判断方式:运行 curl -v https://packagist.org/packages.json,重点看输出里有没有以下线索:
- 卡在
* TLS handshake或出现SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version→ OpenSSL 版本太低(如 CentOS 7 默认的 1.0.2k 不支持 TLS 1.3) - 返回
* Connection reset by peer且没有后续 HTTP 状态码 → 防火墙或代理主动断连,不是超时 - 能拿到
HTTP/2 200但 Composer 仍失败 → 检查是否项目级composer.json里硬写了repositories,覆盖了你配的镜像源
路由器/NAT 设备常见拦截点与绕过验证
某些家用路由器或企业网关会拦截 SNI 扩展、强制重签证书,或限制 TLS 1.2+ 协商。临时验证是否是这类设备导致:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 切手机热点重试
composer install,如果立刻成功 → 基本锁定本地出口设备策略 - 在终端执行
COMPOSER_NO_SSL=1 composer install(仅限诊断),若此时通过 → 100% 是 TLS 层被干扰,不是 DNS 或路由问题 - Windows 用户检查
php.ini中curl.cainfo和openssl.cafile是否指向有效 PEM 文件,路径必须用双反斜杠或正斜杠,且 PHP CLI 实际加载的是哪个php.ini(运行php --ini确认)
别碰 secure-http false,它对 connection reset 完全无效
composer config -g secure-http false 只允许 Composer 接受 HTTP 源,但 packagist.org 会 301 强制跳转回 HTTPS,最终仍要走 TLS 握手——错误照旧,日志里还是卡在同一个 HTTPS URL。更危险的是,它会让私有仓库配置降级为 HTTP,依赖包可能被中间人篡改。真正该做的是:
- 升级 OpenSSL(如 Ubuntu 执行
sudo apt update && sudo apt install openssl) - 换国内稳定镜像源并清缓存:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/+composer clear-cache - 确认系统时间偏差不超过 5 分钟(
date查看),尤其 Docker 容器或休眠唤醒后的虚拟机
最常被忽略的是:企业网里即使开了代理,Composer 也不会自动读取 http_proxy 环境变量,必须显式配置 composer config -g http-proxy;而一旦配错格式(比如少写 http:// 前缀),就会静默失效,看起来像“完全没反应”。










