composer没走国内镜像的根本原因是配置未生效,需验证composer config -g repo.packagist输出是否为{"type":"composer","url":"https://mirrors.aliyun.com/composer/"},常见错误包括键名拼错、缺-g、url末尾无/、https协议不匹配或tls握手失败。

Composer 为什么没走国内镜像?先看 composer config -g repo.packagist
绝大多数情况不是网络问题,而是配置压根没生效。运行这行命令,输出必须是类似 {"type":"composer","url":"https://mirrors.aliyun.com/composer/"} 或清华源地址。如果显示 {"type":"composer","url":"https://packagist.org/"},说明全局镜像根本没设——别急着查 DNS 或代理,先修配置。
常见错误包括:
- 误用
composer config repo.packagist(没加-g),只改了当前项目,不是全局 - 执行命令的用户和实际运行
composer install的用户不一致(比如 sudo 运行但配置没加-g) - 配置被
COMPOSER_HOME环境变量指向了其他目录,导致读取了错误的config.json
镜像地址写错或协议不匹配导致静默回退
阿里云、腾讯云、清华源都要求 HTTPS,写成 HTTP 或带 www 前缀(如 http://mirrors.aliyun.com/composer)会触发 Composer 内部安全策略,自动降级回官方源,且不报错——你只会发现速度慢、请求日志里出现 packagist.org。
正确写法只有两种模式:
- 阿里云:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 清华源:
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该地址已停用,现应为https://mirrors.tuna.tsinghua.edu.cn/composer/)
务必检查末尾是否有斜杠 /,缺了会导致 404,Composer 也会悄悄切回官方源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
PHP cURL 模块不支持 SNI 或证书过期,导致 HTTPS 镜像握手失败
尤其在 CentOS 6、macOS 旧版 OpenSSL 或某些 Docker 镜像中常见。现象是:composer diagnose 显示 WARNING 提示 SSL/TLS 错误,或 composer clear-cache && composer update 卡在 “Loading composer repositories…” 几十秒后回退到 packagist.org。
验证方式:
- 手动 curl 测试:
curl -I https://mirrors.aliyun.com/composer/packages.json,看是否返回 200 - 检查 PHP 的 cURL 版本:
php -r "print_r(curl_version());",若version_number小于0x073a00(即 7.58.0),SNI 支持不稳定 - 临时绕过(仅调试):
export COMPOSER_DISABLE_TLS=1,再跑composer update—— 如果这时能走镜像,基本锁定是 TLS 握手问题
公司代理、DNS 污染或 hosts 绑定冲突
有些企业网络会拦截或重定向 HTTPS 请求,或者本地 /etc/hosts 把 mirrors.aliyun.com 指向了错误 IP。最直接的排查方式是:
- 用
dig mirrors.aliyun.com +short和ping mirrors.aliyun.com对比 IP 是否一致 - 抓包确认真实请求目标:
tcpdump -i any host mirrors.aliyun.com -w mirror.pcap,然后跑一次composer update,用 Wireshark 打开看有没有发出 TLS 握手包 - 关掉所有代理软件(Clash、Surge、Charles),临时删掉
~/.composer/auth.json中可能存在的 proxy 配置项
真正卡住的地方往往不是“该不该换镜像”,而是“你以为它走了镜像,其实连 DNS 都没解析对”。










