答案是必须使用当前稳定镜像并正确配置:执行composer config --global repo.packagist composer https://mirrors.cloud.tencent.com/composer/,确保url末尾带/、type值为composer,并用composer config --global repo.packagist验证输出完整json;旧镜像packagist.phpcomposer.com已关停,阿里云镜像偶发延迟,腾讯云镜像由官方认可且稳定。

国内直接连 Packagist 官方源(https://packagist.org)基本不可用,超时、404、SSL 验证失败是常态——不配代理,composer install 就是“等它自己放弃”的过程。
为什么 composer config -g repo.packagist 不再推荐
旧教程里常写:composer config -g repo.packagist https://packagist.phpcomposer.com。这个镜像早在 2021 年就已关停,现在执行只会返回 Repository "packagist" does not exist. 错误。
- 当前唯一稳定可用的官方认可国内镜像:
https://packagist.org的镜像由腾讯云维护,地址为https://mirrors.cloud.tencent.com/composer/ - 阿里云镜像(
https://mirrors.aliyun.com/composer/)偶发同步延迟,某些新发布包可能滞后数小时 - 配置命令必须带
--global,否则只对当前目录生效:composer config --global repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 执行后检查是否生效:
composer config --global repo.packagist应输出完整 URL
http.proxy 和 https.proxy 必须分开设
很多开发者只设了 http.proxy,结果 Composer 仍走不通——因为 Packagist 全站强制 HTTPS,所有请求实际走的是 https:// 协议,http.proxy 完全不生效。
- 正确写法(以本地 Squid 代理为例):
composer config --global http-proxy http://127.0.0.1:3128和composer config --global https-proxy http://127.0.0.1:3128 - 若代理需认证,URL 中嵌入凭据:
http://user:pass@127.0.0.1:3128(注意:密码含特殊字符需 URL 编码) - 临时禁用代理只需删配置:
composer config --global --unset http-proxy和composer config --global --unset https-proxy - 验证代理是否起效:运行
composer diagnose,末尾会显示HTTP proxy support: enabled
企业内网场景:别碰 secure-http
有些公司内网源使用自签名证书或 HTTP 协议,此时若 Composer 强制校验 HTTPS 或拒绝非安全源,会直接中断安装流程。
- 关闭 HTTPS 强制要求:
composer config --global secure-http false - 但仅限可信内网环境;公网环境下开启此选项等于放弃 TLS 保护,中间人攻击风险极高
- 若内网源走 HTTP,还需额外允许非安全协议:
composer config --global allow-plugins true(Composer 2.2+ 默认禁用未声明插件,部分私有源插件依赖此开关) - 最稳妥做法:让运维把内网源证书导入系统信任库,而非妥协安全策略
代理配置不是“设完就跑”,真正卡住人的往往是镜像失效、HTTPS 代理漏配、或企业环境里被忽略的证书链问题——每次 composer install 卡在 “Downloading…” 前,先 composer diagnose 看一眼,比重装 PHP 实在得多。











