composer config -g repo.packagist不生效是因为键名必须为单数repo.packagist、第三参数composer不可省略、url须以https://开头且末尾带/、必须加-g,任一缺失即静默回退至packagist.org,导致后续curl错误或签名校验失败。

为什么composer config -g repo.packagist不生效还报不安全连接
根本不是镜像地址写错,而是命令漏了关键参数或格式不对,导致 Composer 静默回退到 https://packagist.org,然后因 DNS 污染或防火墙拦截触发 cURL error 7 或 Connection refused。你看到的“不安全连接”其实是 fallback 后的真实失败,不是镜像本身的问题。
-
repo.packagist不能写成repos.packagist(多一个s就完全失效) - 第三个参数
composer是type值,不是注释——漏掉它,配置等于没写 - URL 必须以
https://开头,且末尾必须带/,例如https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌ - 必须加
-g,否则只改当前项目,换目录就失效
强制启用 HTTPS 的正确命令和验证方式
执行这条命令才能真正让 Composer 只走 HTTPS 镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否生效,别信“没报错就是成功”:
- 运行
composer config -g repo.packagist,输出必须是类似{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 进任意项目目录,运行
composer install -vvv | grep "Downloading.*packages.json",第一行域名必须是你配的镜像地址 - 如果仍看到
packagist.org,说明被项目级repositories覆盖了——检查项目composer.json里有没有"repositories": [...]块
secure-http false 是自毁式操作,别碰
有些教程教用 composer config -g secure-http false 来“绕过不安全提示”,这等于主动关闭 HTTPS 强制校验,会让所有 HTTP 镜像(包括被劫持的中间人代理)都被接受,签名验证也自动失效。
- 默认
secure-http就是true,不用设;设成false后,composer diagnose会显示secure-http: FAIL - 真正要关的是无效配置:比如写了
http://镜像却指望它工作——它本就不该存在 - 如果你的环境连
https://mirrors.aliyun.com/composer/都连不通,问题在 DNS、代理或证书链,不是协议开关
镜像源配对但 signature verification failed 怎么办
这不是镜像问题,是本地系统时间偏差超过 15 分钟,导致 Packagist 签名时间戳校验失败。哪怕你走的是阿里云镜像,它只是代理元数据,Date 响应头还是 packagist.org 发的,本地时间一歪,整个签名链就崩。
- 快速确认:
curl -I https://packagist.org看返回头里的Date:,和date命令输出对比 - 别用
date -s临时改——不持久,还可能乱时区 - 正确做法:
sudo timedatectl set-ntp true,再timedatectl timesync-status查延迟 - Docker 容器要额外挂载:
-v /etc/localtime:/etc/localtime:ro,否则宿主机时间准,容器内仍不准











