先设置环境变量强制IPv4解决composer连接问题。通过curl_IPRESOLVE=4强制使用IPv4,或切换至阿里云、laravel China等国内镜像源,可有效规避因本地网络不支持ipv6导致的超时失败。

Composer 在使用过程中如果遇到网络连接超时或失败,其中一个常见原因是 IPv6 网络配置异常。尽管目标服务器可能支持 IPv6,但本地网络或 ISP 并未正确支持或路由 IPv6 流量,导致连接卡住或失败。以下是解决 Composer 因 IPv6 导致连接问题的有效方法。
检查是否为 IPv6 问题
先确认问题是否由 IPv6 引起。可以使用以下命令测试网络请求:
- 运行 curl -v https://packagist.org,观察连接阶段是否长时间停留在某个 IPv6 地址上。
- 若连接尝试连接类似 2a03:2880:: 这样的地址并超时,则极可能是 IPv6 路由问题。
强制 Composer 使用 IPv4
最直接的解决方案是让 php 的 stream context 和系统命令(如 curl)优先使用 IPv4。
- 设置环境变量:export COMPOSER_DISABLE_TLS=false(确保安全连接仍启用)
- 设置 curl 强制使用 IPv4:export CURL_IPRESOLVE=4
- 在执行 composer 命令前加上该变量:CURL_IPRESOLVE=4 composer install
修改系统级 dns 或网络配置(可选)
如果你频繁遇到此类问题,建议从系统层面优化网络解析行为。
- 编辑 /etc/gai.conf(linux 系统),取消注释并添加:
- 这会优先使用 IPv4 映射的 IPv6 地址,实际效果是优先走 IPv4。
precedence ::ffff:0:0/96 100
更换镜像源提升稳定性
国内用户可切换到国内镜像源,避免国际链路中 IPv6 不稳定的问题。
- 使用阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 或 Laravel China 镜像:composer config -g repo.packagist composer https://packagist.laravel-china.org
- 镜像通常通过优化 cdn 和协议适配,自动规避 IPv6 问题。
基本上就这些。多数情况下,设置 CURL_IPRESOLVE=4 或切换镜像源即可快速解决问题。IPv6 本意是改善网络,但在过渡期反而常带来兼容性困扰,合理绕行是实用之选。不复杂但容易忽略。