Composer不支持智能DNS或自动fallback,仅认repo.packagist下首个地址;超时、500、TLS失败均不切换,必须通过反向代理+GEO负载均衡实现区域路由,且URL末尾必须带/,否则拼接错误导致404。

Composer 本身不支持智能 DNS 解析
别指望 composer.json 里写几个 URL 就能自动 fallback 或 GEO 路由——Composer 只认 repo.packagist 键下的第一个有效地址,超时、500、TLS 失败都不会切下一个。所谓“智能解析”是外部机制的事,不是 Composer 的职责。
硬配 https://mirrors.aliyun.com/composer/ 对跨国团队根本不可靠:中国节点快,法兰克福节点可能卡在 Loading composer repositories,不是网络不通,而是回源绕路、CDN 缓存未命中、或 ca-certificates 缺失导致 TLS 握手失败(尤其在 Alpine 容器里)。
-
secure-http默认开启,cURL 会严格校验证书链;旧系统或小内存容器常因此静默卡住 - DNS 轮询、SRV 记录、EDNS-Client-Subnet 这些高级特性,Composer 底层 cURL 和 PHP stream 都不主动利用
- 镜像 URL 末尾漏掉
/(比如写成https://your-mirror)会导致内部拼出https://your-mirrorpackages.json→ 404
用反向代理 + 地理感知 LB 实现真正路由
唯一可行路径:部署一个统一入口域名(如 https://composer.mirror.internal),背后挂多个区域化后端,由负载均衡器按客户端真实出口 IP 做 GEO 分发。
关键不在 DNS,而在 LB 层的请求头识别与流量调度。Cloudflare Load Balancing、AWS Global Accelerator 或自建 Nginx + ngx_http_geoip2_module 都可胜任,但必须满足:
- LB 做 TLS 终止(避免下游节点证书链问题),并启用 HTTP 缓存(减少 packagist.org 回源压力)
- 中国节点后端接阿里云镜像(
cn-mirror.internal),海外节点直连packagist.org并设COMPOSER_IPV4=1防 IPv6 超时 - 所有机器只运行一次:
composer config -g repo.packagist composer https://composer.mirror.internal
别试图用 repositories 数组写多个源来“模拟 fallback”——Composer 不解析数组,它只取第一个生效的 packagist 键。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
排查 DNS 问题必须绕过 Composer 直查底层
报 Could not resolve host 时,90% 是系统级 DNS 失效,不是 Composer 配置错。先别动 composer.json,直接测系统是否能解析:
- 运行
nslookup repo.packagist.org 8.8.8.8:有 IP 返回 → 本地 DNS 故障;无响应 → 网络策略或防火墙拦截 - WSL 和 Windows 宿主机 DNS 独立,得分别测试;macOS 用
scutil --dns查当前配置 - 临时验证镜像可用性:
curl -I --resolve mirrors.aliyun.com:443:223.5.5.5 https://mirrors.aliyun.com/composer/packages.json(IP 替换为你自己查到的) - hosts 绑定最稳但易出错:Linux/macOS 编辑
/etc/hosts,Windows 编辑C:\Windows\System32\drivers\etc\hosts,格式必须是IP 域名(空格分隔,不能 Tab 或中文符号)
改完 hosts 后务必刷新缓存:sudo dscacheutil -flushcache(macOS)、ipconfig /flushdns(Windows)、sudo systemd-resolve --flush-caches(Linux systemd)。
IPv6 卡顿优先用 COMPOSER_NO_IPV6=1
执行 composer install 卡在 Resolving dependencies,日志里反复出现 [2a02:fc00::1]:443?这不是 DNS 污染,是 IPv6 路径不通但 Composer 还在重试。
COMPOSER_NO_IPV6=1 是 Composer 2.2+ 原生支持的环境变量,它在 DNS 解析阶段就过滤掉所有 IPv6 地址,不依赖 cURL 版本,也不改系统配置:
- Linux/macOS:
COMPOSER_NO_IPV6=1 composer install - Windows PowerShell:
$env:COMPOSER_NO_IPV6="1"; composer install - 全局生效:
composer config -g use-ipv4 true(仅 Composer 2.2+ 有效)
单禁 IPv6 不够稳,建议搭配阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾 /)。两者叠加,才能彻底避开国际链路抖动和 DNS 解析隐性等待。


















