Composer用国内镜像仍Connection reset,根本原因是PHP的curl或stream扩展在TLS握手或HTTP/2协商阶段被中间设备(如企业防火墙、校园网网关)主动中断连接,而非镜像失效;需通过降级TLS版本、禁用HTTP/2、关闭并行下载或直测file_get_contents验证底层连接。

为什么 Composer 用国内镜像还会 Connection reset?
不是镜像地址失效,而是 PHP 的 curl 或 stream 扩展在 TLS 握手或 HTTP/2 协商阶段被中间设备(如企业防火墙、校园网网关、甚至某些家用路由器)主动中断连接。现象是 Connection reset by peer 或 Failed to enable crypto,但 ping 和 curl -I https://mirrors.aliyun.com 看似正常。
- 阿里云、腾讯云、华为云等镜像站本身支持 HTTP/2 和 SNI,但部分老旧网络设备不兼容 HTTP/2 或对 ALPN 协商失败时直接 RST
- Composer 默认启用
http-basic认证和并行下载(parallel),加剧了连接复用和 TLS 会话重用问题 -
composer config -g repo.packagist composer https://packagist.phpcomposer.com这类已停用的镜像会返回 301 后重定向到 HTTPS,而重定向链可能触发中间设备策略
快速验证是否是 TLS/HTTP/2 兼容问题
用最简命令绕过 Composer 层,直测底层连接行为:
php -r "echo file_get_contents('https://mirrors.aliyun.com/composer/');"
如果报 failed to open stream: Unable to find the wrapper "https",说明 OpenSSL 扩展未启用或 CA 证书路径错误;如果报 Connection reset by peer,则大概率是 TLS 协商被截断。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 加
-d openssl.cafile=/path/to/cacert.pem指定可信证书(推荐用 curl 官方 PEM) - 强制降级到 TLS 1.2:
php -d openssl.cipher_suite='TLSv1.2' -r "echo file_get_contents('https://mirrors.aliyun.com/composer/');" - 禁用 HTTP/2(若用 cURL):
curl --http1.1 https://mirrors.aliyun.com/composer/
Composer 配置层绕过连接重置的实操方案
不换镜像,只调低协议强度和并发压力:
- 关闭并行下载:
composer config -g parallel.downloads 1 - 禁用 HTTP/2(需 Composer ≥ 2.5):
composer config -g http.http_version 1.1 - 指定 TLS 版本(写入
~/.composer/config.json):"options": { "ssl": { "crypto_method": 3072 } }(3072=TLSv1_2_METHOD,PHP 7.1.0+ 支持) - 临时换用 HTTP 镜像(仅调试用,不推荐长期):
composer config -g repo.packagist composer http://packagist.mirrors.ustc.edu.cn(注意是http://,非https://)
企业/教育网环境下的特殊处理
很多单位出口网关会深度检测 TLS ClientHello 中的 ALPN 字段(如包含 h2),并直接丢弃包。此时必须让 PHP 的 OpenSSL 完全不发 ALPN:
- 升级到 PHP 8.1+ 并设置:
openssl.conf中添加Options = +NoTLSv1_3 +NoALPN(需重新编译 OpenSSL) - 更现实的做法:改用
git clone方式安装依赖(跳过 Composer 的 HTTP 下载):composer config -g platform-check false,再手动git clone https://github.com/vendor/package.git vendor/vendor/package - 终极 fallback:离线打包 —— 在能连通的机器上执行
composer install --no-dev --prefer-dist --ignore-platform-reqs,把vendor/整体拷贝过去
真正卡住的往往不是镜像地址,而是你本地 PHP 的 OpenSSL 版本、系统 CA 证书更新状态、以及出口网关对 TLS 扩展字段的容忍度。先跑通 file_get_contents(),再谈 Composer 配置。

















