http.timeout 控制 composer 所有 http/https 请求的总操作超时(含 tls 握手、证书验证、响应读取),单位秒,仅作用于下载阶段;不存在 https.timeout 等专用安全参数。

composer config http.timeout 控制的是 HTTPS 下载超时,不是“安全连接”专用参数
Composer 没有单独的“安全连接超时”配置项。http.timeout 就是它对所有 HTTP/HTTPS 请求统一使用的操作超时(operation timeout),包括 TLS 握手、证书验证、响应读取全过程。它不区分协议安全性,只管整个请求从发起到收到完整响应的总耗时。
常见误解是以为 https.timeout 或 tls.timeout 存在——实际不存在,设了也无效。唯一有效的是 http.timeout,且必须配在 config 段下:
{
"config": {
"http.timeout": 600
}
}
- 单位是秒,
600表示 10 分钟;设为0表示禁用超时(不推荐) - 该值只影响下载包阶段(
Downloading),不影响依赖解析或脚本执行 - 若你用的是私有 HTTPS 仓库且证书自签,还需额外配
"disable-tls": true,否则会卡在证书校验而非超时
Connection refused 或 cURL error 7 不是超时问题,http.timeout 完全无效
报 Connection refused、cURL error 7 或卡在 Resolving dependencies,说明 Composer 根本没发出 HTTP 请求——它连 DNS 解析或 TCP 连接都失败了。
此时调 http.timeout 毫无意义,因为超时机制还没启动。真正要查的是底层连通性:
- 运行
dig mirrors.aliyun.com @8.8.8.8看能否返回 IP;若超时,换 DNS(如nameserver 8.8.8.8) - 检查
/etc/hosts是否把镜像域名指向了127.0.0.1 - 用手机热点测试:很多企业网会直接屏蔽
packagist.org域名,和超时无关 -
curl -I https://mirrors.aliyun.com/composer/packages.json直接测源站 HTTP 状态,绕过 Composer
process-timeout 和 http.timeout 是两套独立机制,别混用
process-timeout(默认 300 秒)控制整个 composer install 命令生命周期,包含 DNS、连接、下载、解压、脚本执行等所有环节;而 http.timeout 只管单次 HTTP 请求的收发耗时。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
两者同时存在时,谁先超谁先触发中断。但关键区别在于:
-
process-timeout是进程级熔断,超时后抛ProcessTimedOutException -
http.timeout是 cURL 层重试控制,超时后会自动重试最多 3 次(由CURLOPT_TIMEOUT和CURLOPT_CONNECTTIMEOUT共同决定) - 国内用户常误设
http.timeout却不切镜像源——结果仍是连不上packagist.org,再调高也没用
CI/CD 中设超时必须显式传参,别依赖全局 config
Docker 容器、GitHub Actions runner 等环境常复用临时文件系统,composer config -g 写入的配置很可能在下次构建时丢失。
更稳妥的做法是每次命令都带参数,避免隐式依赖:
-
composer install --timeout=900 --no-interaction(注意=不能省) -
COMPOSER_PROCESS_TIMEOUT=900 composer update(环境变量优先级更高) - 若用 PHP 封装层(如 Laravel Envoyer),需确保
php -d max_execution_time=0同时生效,否则脚本阶段仍可能被 PHP 中断
真正容易被忽略的是:TLS 握手慢、中间代理吞吐低、DNS 解析卡顿,这些都会被笼统报成“超时”,但根源不在 Composer 配置里。先确认 curl -v https://mirrors.aliyun.com/composer/ 能在 2 秒内完成 handshake,再调参数才有效。










