Composer用代理时超时本质是HTTP层请求卡住,必须调http.timeout;proxy配置需同时满足三项:正确设置http-proxy/https-proxy、设http.timeout为600、验证diagnose中HTTP proxy显示OK。

Composer 用代理时超时,本质是 HTTP 层请求卡住,必须调 http.timeout,不是改 process-timeout 或系统 default_socket_timeout 就能解决。
为什么 proxy + timeout 容易配错
很多人以为设了 http-proxy 就万事大吉,结果还是报 curl error 28 或卡在 Downloading。根本原因是:代理链路本身有额外延迟(比如 TLS 握手、中间网关转发),而 Composer 默认 http.timeout 只有 60 秒,远不够用。
-
process-timeout控制整个命令生命周期(含脚本执行),对网络下载阶段无效 -
COMPOSER_PROCESS_TIMEOUT环境变量只影响进程总耗时,不干预单次 HTTP 请求 - PHP 的
default_socket_timeout会被 Composer 覆盖,直接改它没用 - 代理配置写错(比如漏
http.前缀、协议写成https://)会导致静默 fallback 到直连,超时其实是走的境外源
正确设置代理 + 超时的三步操作
必须同时完成以下三项,缺一不可:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用
composer config -g http-proxy http://127.0.0.1:1080(HTTP 代理)或composer config -g https-proxy https://127.0.0.1:1080(HTTPS 代理)——注意协议要匹配代理服务实际支持的类型 - 立刻设置
composer config -g http.timeout 600,确保每次 HTTP 请求(含代理转发)最长等 10 分钟 - 验证代理是否生效:运行
composer config -g http-proxy应输出完整 URL;再执行composer diagnose,看 “HTTP proxy” 行是否显示 “OK”
代理环境下的常见陷阱
即使配置全对,仍可能失败,因为代理本身有兼容性问题:
- SOCKS5 代理不能直接用
http-proxy,得用 cURL 全局配置:export ALL_PROXY=socks5://127.0.0.1:1080,然后运行COMPOSER_HTTP_TIMEOUT=600 composer install - 企业级代理(如 Zscaler、Blue Coat)常拦截自签名证书或重写 Host 头,此时需额外加
composer config -g secure-http false并信任代理 CA - 代理开启认证时,URL 必须带用户名密码:
http://user:pass@127.0.0.1:8080,否则会卡在 407 Proxy Authentication Required - 某些代理对 HTTP/2 不友好,可临时禁用:
composer config -g http.http2 false
临时调试比永久配置更安全
尤其在 CI 或共享开发机上,硬写进全局配置容易污染他人环境。推荐优先用环境变量组合:
COMPOSER_HTTP_TIMEOUT=600 http_proxy=http://127.0.0.1:1080 composer install- 如果代理需要认证:
http_proxy=http://user:pass@127.0.0.1:1080 COMPOSER_HTTP_TIMEOUT=600 composer update - 验证代理链路是否通:先
curl -x http://127.0.0.1:1080 -I https://mirrors.aliyun.com/composer/packages.json,成功再跑 Composer
真正难处理的从来不是超时数字本身,而是代理和镜像源之间的协议协商细节——比如阿里云镜像要求 HTTPS,但你的代理只支持 HTTP 隧道,这时哪怕 timeout 设到 3600 秒也没用。

















