根本原因是网络出口或镜像配置问题,非Composer自身故障;需优先验证DNS解析与端口连通性,再切换阿里云等国内镜像源(如composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/),并排查代理及HTTPS证书干扰。

Composer 安装包时提示 “Connection refused” 或 “cURL error 7: Failed to connect”,根本原因几乎全是网络出口或镜像配置问题,不是 Composer 本身故障。
为什么 composer install 或 composer require 直接报连接拒绝
Composer 默认走 packagist.org(域名解析为 IPv4 或 IPv6 地址),但国内多数环境无法直连其 443 端口——可能被防火墙拦截、DNS 污染、或本地代理未生效。错误典型如:cURL error 7: Failed to connect to packagist.org port 443: Connection refused 或 file_get_contents(): php_network_getaddresses: getaddrinfo failed。
- 不是 Composer 版本太低(
composer --version≥ 2.0 即可) - 不是 PHP cURL 扩展没开(
php -m | grep curl能看到就 ok) - 真正卡点:请求发不出去,或发出去了但没收到响应
换国内镜像源的实操步骤(最常用有效)
阿里云、腾讯云、华为云等镜像均同步 packagist.org,延迟低且稳定。切记:必须用 composer config 全局或项目级设置,不能只改 composer.json 里的 repositories(那仅对当前项目部分依赖生效,且易被 packagist.org fallback 覆盖)。
- 全局替换(推荐):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 项目内替换(仅当前目录):
composer config repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 验证是否生效:
composer config -g repo.packagist应返回镜像 URL,而非https://packagist.org - 注意:不要加
--global和-g混用;Windows 用户若提示权限错误,用管理员 CMD 运行
HTTPS 证书或代理导致的连接拒绝怎么查
某些企业网络强制中间人代理,会篡改 HTTPS 证书,导致 Composer 校验失败并静默转为连接拒绝。现象是:浏览器能打开 https://packagist.org,但 composer diagnose 显示 curl error 60 或直接 Connection refused。
- 临时绕过证书校验(仅调试!不安全):
composer config -g secure-http false+composer config -g cafile /dev/null - 更稳妥方式:导出企业根证书(如
company-ca.crt),再配置:composer config -g cafile /path/to/company-ca.crt - 若走 HTTP 代理:
composer config -g http-proxy http://127.0.0.1:8080(注意是http-proxy,不是proxy) - 检查系统级代理干扰:
env | grep -i proxy,如有输出,临时清空:unset http_proxy https_proxy
仍连不上?快速定位是 DNS、路由还是防火墙
别急着重装 Composer。先用基础命令确认底层通路:
- 测 DNS 解析:
nslookup packagist.org或dig packagist.org +short,若无结果或返回异常 IP,换 DNS(如114.114.114.114) - 测端口连通:
telnet packagist.org 443(Linux/macOS)或Test-NetConnection packagist.org -Port 443(PowerShell),超时即说明防火墙/运营商拦截 - 对比镜像是否可用:
curl -I https://mirrors.aliyun.com/composer/packages.json,返回200 OK就说明镜像正常,问题纯属原站不可达 - PHP 层面验证:
php -r "print_r(file_get_contents('https://mirrors.aliyun.com/composer/packages.json', false, stream_context_create(['http'=>['timeout'=>10]])));" | head -c 100
复杂点在于:有些网络环境下,curl 命令能通,但 PHP 的 cURL 扩展因 SSL 版本或 CA 路径不同而失败;也有镜像源在特定地区 CDN 节点异常,需手动切另一个镜像。这些细节不跑真实命令很难发现。


















