composer 默认 secure-http 为 true 是为防中间人攻击;内网 http 私有源需全局执行 composer config -g secure-http false,且须确保域名解析正常、响应合法,https 才是生产环境正解。

为什么 secure-http 默认是 true 且拒绝 HTTP 源
Composer 从 1.0 开始强制要求所有仓库(包括私有源)必须使用 HTTPS,这是为了防止中间人劫持、包篡改或凭证泄露。当你在内网用 HTTP 搭建了私有 Packagist 或 Satis 服务,composer install 会直接报错:The repository 'xxx' is not secure, and the 'secure-http' setting is enabled.
如何全局关闭 secure-http(仅限可信内网)
这不是“配置 Composer”,而是修改 Composer 的全局配置项。它影响所有项目,所以只应在完全可控的内网环境使用。
- 执行
composer config -g secure-http false,该命令写入~/.composer/config.json - 验证是否生效:运行
composer config -g secure-http,输出应为false - 注意:如果之前设过项目级配置(
composer config secure-http false),它会覆盖全局设置,需先删掉项目根目录下的composer.json中的"secure-http"字段或运行composer config --unset secure-http
为什么不用 --no-secure-http 参数临时绕过
这个参数根本不存在 —— Composer 命令行不支持临时禁用 secure-http。你查不到它的文档,也跑不通。网上有些文章写的 --no-secure-http 是混淆了旧版调试参数或臆测,别试。
- 唯一合法的运行时控制方式,是提前配好
secure-http配置项 - CI/CD 脚本里若要适配 HTTP 私有源,必须在执行
composer install前完成composer config -g secure-http false - 某些 Docker 镜像(如
composer:2)默认不带全局配置,每次新建容器都要重设
HTTP 私有源上线后还要注意什么
关掉 secure-http 只是让 Composer “不拦你”,不代表安全风险消失。内网 HTTP 源仍可能被同网段其他机器嗅探、伪造响应或缓存污染。
- 确保私有源域名能被正确解析(比如
packagist.internal),不要用http://192.168.x.x—— Composer 对 IP 地址的 HTTP 源支持不稳定,某些版本会静默跳过 - 私有源的
packages.json必须返回有效 JSON,且content-type为application/json,否则即使关了secure-http也会报Invalid response - 如果私有源用了自签名证书但你又想切回 HTTPS,别只改 URL,还得配
composer config -g cafile /path/to/cert.pem,否则照样失败
关 secure-http 是权宜之计,不是长期方案。真要上生产,HTTPS + 内网 CA 信任才是正路。内网没 HTTPS?那得先解决那个问题,而不是只调 Composer 的开关。







