http.timeout不控制tls握手,应调http-basic-timeout(推荐300秒)和process-timeout(推荐1200秒),并同步更新ca证书、验证curl -v卡点、确认镜像源生效。

Composer 本身没有“安全连接超时”这个独立配置项,所谓“安全连接超时”实际是 HTTPS 请求在 TLS 握手或证书验证阶段卡住,本质属于 http-basic-timeout 或底层 cURL 连接行为,需从网络层和 HTTP 超时协同调整。
为什么 http.timeout 对 HTTPS 卡顿无效
很多用户看到 cURL error 35(SSL connect error)或卡在 * Connected to mirrors.aliyun.com (114.114.114.114) port 443 (#0) 后无响应,就去调 http.timeout,但这是错的。该配置只控制 HTTP 响应体读取阶段,不覆盖 TLS 握手、证书校验、SNI 发送等前置步骤。
-
http.timeout控制的是CURLOPT_TIMEOUT,即整个请求生命周期(含 DNS、TCP、TLS、HTTP)——但它在新版 Composer 中已被http-basic-timeout取代,且默认值仅 60 秒,远低于握手可能耗时 - TLS 握手失败常因中间设备(如企业防火墙、代理、杀毒软件)劫持或重置连接,
curl -v https://mirrors.aliyun.com/composer/packages.json会卡在* Initializing SSL connection或* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256阶段 - PHP 的
openssl.cafile或系统 CA 证书过期/缺失,也会导致静默握手失败,错误日志里却看不到明显提示
http-basic-timeout 和 process-timeout 必须同时设
HTTPS 下载超时是两级叠加:单次请求有 http-basic-timeout,整个命令有 process-timeout。只调一个,另一层仍会掐断。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 设
http-basic-timeout:它专管每个 HTTPS GET 请求的连接+读取总时长,推荐值300(5 分钟),命令为:composer config -g http-basic-timeout 300 - 设
process-timeout:它管整个composer install流程,包括解析、下载、解压、脚本执行,推荐值1200(20 分钟),命令为:composer config -g process-timeout 1200 - 两者都设为
0不建议——某些网络环境 TLS 握手失败后会无限重试,进程彻底挂死,无法 Ctrl+C 中断
绕过 TLS 问题的临时诊断手段
当确认是 HTTPS 层卡住,又无法立刻修复网络策略时,可用以下方法快速定位是否为证书或协议问题:
- 用
curl --tlsv1.2 -I https://mirrors.aliyun.com/composer/packages.json强制指定 TLS 版本,排除服务器不支持 TLSv1.3 导致的僵死 - 加
--cacert /path/to/cacert.pem指定可信 CA 包,绕过系统默认证书路径(尤其 Windows 上 PHP 常找不到ca-bundle.crt) - 运行
openssl s_client -connect mirrors.aliyun.com:443 -servername mirrors.aliyun.com直接测 TLS 握手是否成功;若返回Verify return code: 0 (ok),说明证书没问题,问题出在网络中间层 - 临时禁用证书验证(仅调试!):
curl -k -I https://mirrors.aliyun.com/composer/packages.json;若此时通了,说明是证书链或 OCSP Stapling 导致的阻塞
CI/CD 环境下最易忽略的点
GitHub Actions、GitLab CI 容器中,http-basic-timeout 常被覆盖,且默认 CA 证书不全。光改 Composer 配置不够。
- 务必在 CI 脚本开头加:
update-ca-certificates(Debian/Ubuntu)或apk add ca-certificates(Alpine) - 避免使用
php:alpine镜像直接跑 Composer——它缺 OpenSSL 依赖,curl无法完成 TLS 握手,报错却是模糊的Connection timed out - 设置
COMPOSER_DISABLE_TLS=1是危险操作,虽能跳过证书验证,但会降级为 HTTP(镜像站已强制 HTTPS,实际会 301 重定向失败),不应作为解决方案 - 真正稳的做法:用
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/+composer clear-cache+ 显式设置两个 timeout + 更新 CA 证书
HTTPS 连接卡顿从来不是 Composer 的 bug,而是你本地环境与镜像源之间 TLS 握手链路上某个环节(DNS、防火墙、CA、OpenSSL 版本、SNI 支持)出了问题。调 timeout 只是买时间,真正要盯的是 curl -v 输出里哪一行停住了——那才是故障点。










