“remote repository closed”实为tls握手被拦截或配置错误所致,常见于企业防火墙、镜像url缺斜杠、项目级repositories覆盖全局配置、插件绕过镜像等场景,需结合curl -vi与composer install -vvv定位真实请求。

“Remote repository closed” 不是仓库真关了,是 HTTPS 握手被拦截
这个错误根本不是 Packagist 或镜像站关闭,而是 PHP 的 cURL 在 TLS 握手阶段被静默中断——常见于企业防火墙(深信服、奇安信)、杀毒软件(火绒/360)或中间人代理。浏览器能打开 https://mirrors.aliyun.com/composer/,但 composer install 卡住无日志,基本就是这个原因。
验证方式:运行 curl -vI https://mirrors.aliyun.com/composer/packages.json,如果卡在 * TLS handshake 就坐实了。
- 临时绕过(仅调试):
composer config -g cafile /dev/null+composer config -g secure-http false - 强制走 IPv4(避免 IPv6 黑洞):
CURL_IPRESOLVE=4 composer install(Linux/macOS) - Windows 用户可改 hosts,把
mirrors.aliyun.com解析到 IPv4 地址(如118.31.171.219)
镜像 URL 少了斜杠,Composer 拼出非法路径导致 404
报错里若夹杂 packages.json、provider-*.json 等路径,且实际请求地址变成 https://mirrors.aliyun.com/composerpackages.json(注意没斜杠),说明镜像配置漏了末尾 /。
Composer 会把你的 URL 和内部路径硬拼,https://mirrors.aliyun.com/composer + packages.json → /composerpackages.json,404 后就 fallback 到官方源,再报“remote repository closed”这种误导性提示。
- 正确写法:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(结尾必须有/) - 验证是否生效:
composer config -g repo.packagist输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 别信
composer diagnose,它不校验 URL 格式,只告诉你“Repo is not configured properly”这种模糊提示
项目级 repositories 字段让全局镜像彻底失效
只要项目根目录 composer.json 里存在 "repositories" 字段(哪怕只是空数组 []),全局配置的 repo.packagist 就完全不生效——不是优先级低,是直接跳过。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
此时 Composer 会按 repositories 数组顺序逐个尝试,如果第一个源不可用或没同步,就会卡在“remote repository closed”,而你根本没意识到自己配的镜像根本没跑。
- 检查:
grep -n repositories composer.json,确认是否存在该字段 - 临时禁用:
composer config --unset repositories(不加-g) - 若需保留私有源,应显式把 packagist 镜像加进数组,key 设为
"packagist":"repositories": [ {"type": "composer", "url": "https://mirrors.aliyun.com/composer/", "packagist": false}, {"type": "package", "url": "..."} ]
插件(如 prestissimo)绕过镜像直连 GitHub
如果你装过 hirak/prestissimo 或其他下载加速插件,它们会绕开 Composer 原生 HTTP 客户端,直接调系统 curl 下载 ZIP 包,完全不读 repo.packagist 配置。
结果就是:镜像配得再好,插件仍直连 https://api.github.com,被墙后报“remote repository closed”或“file could not be downloaded”。
- 立即停用:
composer install --no-plugins --prefer-dist - 查是否全局启用:
composer config -g plugins,若输出true,关掉:composer config -g plugins false - CI/CD 脚本中务必显式加
--no-plugins,否则旧缓存可能触发并发崩溃
真正卡住的地方往往不在配置本身,而在 DNS 解析、TLS 握手、插件接管或项目级配置覆盖这些隐性层。验证时别只看 composer config 输出,要抓 composer install -vvv 的第一行真实请求地址,再比对 curl -vI 的握手过程——这才是定位“remote repository closed”的唯一可靠路径。










