Composer下载慢主因是未正确配置国内镜像源,需严格设置repo.packagist键名、composer类型值、HTTPS末尾斜杠及-g参数,清缓存并验证dist.url是否更新为镜像路径。

Composer走代理下载慢,90%不是代理本身问题,而是镜像源没换、缓存没清、并发没开——代理只是通道,真正卡点在源地址和本地配置。
为什么加了代理还是卡在Downloading
代理只转发请求,但Composer默认仍连packagist.org(欧洲服务器),DNS解析、TLS握手、首字节延迟全高;代理反而可能放大这些延迟。更常见的是:镜像配置写错,导致静默 fallback 回官方源,你根本没走镜像,还在徒劳等代理转发。
-
repo.packagist写成repos.packagist(多一个 s)——Composer 2.x+ 直接忽略,不报错也不警告 - 漏掉
composer类型参数:composer config -g repo.packagist https://mirrors.aliyun.com/composer/❌,必须是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/✅ - URL末尾缺
/:比如https://mirrors.aliyun.com/composer会拼出/composerpackages.json,返回 404 - 没加
-g参数:只改当前项目,create-project或全局命令仍走默认源
验证是否真走镜像而非代理中转
别只看命令有没有报错,得看实际发出去的请求域名。运行:
composer show laravel/framework -vvv 2>&1 | grep "Downloading"
日志里必须出现 mirrors.aliyun.com 或你配的镜像域名。如果还是 api.packagist.org 或 github.com,说明镜像根本没生效,代理再快也没用。
- 先执行
composer config -g repo.packagist,输出必须是完整 URL 字符串或 JSON 对象(含"url": "https://...") - 输出为空、
null或仍是https://packagist.org,代表配置失败 - 确认无误后,立刻执行
composer clear-cache,否则缓存里还存着旧源元数据,Composer 优先读缓存,根本不会发新请求
代理环境下必须调的三个关键配置
代理本身不提速,但配合以下配置能避免它成为瓶颈:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 并发数设为
10:composer config -g http-max-concurrent-downloads 10(注意:不是parallel-downloads,该参数已弃用) - 超时拉长:
composer config -g process-timeout 3600和composer config -g http.timeout 300,防止代理链路抖动触发中断 - 强制走 dist 包:
composer install --prefer-dist,跳过 git clone,减少代理对大量小请求的调度压力
如果代理是公司内网类型(如 Squid),还要确认它允许 HTTPS CONNECT 隧道到镜像域名;部分代理会拦截或限速非标准端口,可临时用 curl -v https://mirrors.aliyun.com/composer/packages.json 测试直连是否通。
CI/CD 或 Docker 中代理 + 镜像的组合陷阱
全局配置 -g 在容器里极易失效:构建脚本常以非 root 用户运行,读不到 /root/.composer/config.json。更稳的做法是进项目目录后执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
这条命令会写入当前项目的 composer.json 的 repositories 字段,不依赖用户权限,且不会覆盖已有私有源。
- CI 中建议加
--no-autoloader --no-scripts --no-plugins,避免代理环境里执行钩子时额外发起网络请求 - 同时缓存
~/.composer/cache目录,让多个 job 复用已下载包,减少重复走代理 - 如果镜像源本身也走代理(比如公司内部镜像反向代理阿里云),确保那个镜像服务开启了
allow-plugins兼容模式(Composer 2.2+ 默认禁用未声明插件)
最易被忽略的一点:镜像 URL 必须带协议、域名、路径、结尾斜杠四者齐全,少一个,Composer 就静默回退——它不报错,只默默变慢。

















