必须设置 "secure-http": false 才能使用 HTTP 镜像,否则 Composer 默认拒绝非 HTTPS 仓库并报错;该配置为硬性开关,影响所有仓库,且需确保镜像服务可用、网络可达。

Composer 设置镜像为 HTTP 协议(禁用 HTTPS)
Composer 默认会拒绝非 HTTPS 的镜像源,直接设置 http:// 地址会报错:The "http://packagist.phpcomposer.com" repository has a non-HTTPS URL, which is not allowed by default。必须显式允许不安全协议才能生效。
启用 allow-http 配置项
在全局或项目级 composer.json 中添加 "allow-plugins" 之外的关键配置是 "secure-http",但它控制的是「是否强制所有仓库使用 HTTPS」——设为 false 才能允许 HTTP 镜像。
- 运行命令修改全局配置:
composer config -g secure-http false - 或手动编辑
~/.composer/config.json,确保包含:{"secure-http": false} - 之后再设置 HTTP 镜像才不会被拦截,例如:
composer config -g repos.packagist composer http://packagist.phpcomposer.com
为什么不能只改 repo URL 而不关 secure-http
Composer 从 1.0 开始默认开启 secure-http,这是硬性校验:只要仓库 URL 以 http:// 开头,且该配置为 true(默认值),就会中止执行并抛出错误。即使你用 composer config 成功写入了 HTTP 地址,后续的 install 或 update 仍会失败。
- 常见误操作:只运行
composer config -g repos.packagist ... http://...,没关secure-http,结果一切照常走 HTTPS -
secure-http false是开关,不是建议;它影响所有仓库,不只是 packagist - 某些企业内网镜像确实只有 HTTP 服务,此时关闭是唯一可行路径
HTTP 镜像的实际使用限制
即使成功启用,HTTP 镜像仍有明显约束,不是“设了就能随便用”:
- PHP 7.2+ 环境下,cURL 默认可能拒绝不带证书的 HTTPS,但反过来,HTTP 不会自动降级 —— 必须靠
secure-http false解锁 - 部分镜像(如旧版 phpcomposer)已下线,
http://packagist.phpcomposer.com现在返回 404,需确认目标镜像真实可用 - 若 Composer 版本 ≥ 2.2,还可能触发插件安全策略(
allow-plugins),和secure-http无关但会一并报错 - 公司防火墙若拦截 HTTP 流量(尤其对 80 端口限流),反而比 HTTPS 更慢或超时
真正要用 HTTP 镜像,得先确认镜像服务活着、网络可达、且没有中间人干扰 —— 否则关了 secure-http 只是把报错从「协议不安全」换成「连接被重置」。










