Composer install/update 报“Connection refused”通常是系统防火墙或代理拦截HTTPS请求所致,需通过curl测试连通性、切换镜像、临时关闭防火墙或放行php.exe来确认和解决。

Composer install/update 报错 “Connection refused” 是防火墙或代理在拦请求
绝大多数情况下,composer install 或 composer update 突然报 Connection refused,不是 Composer 本身坏了,而是系统级网络策略阻断了它对 packagist.org(或镜像源)的 HTTPS 请求。常见于企业内网、学校网络、Windows 上启用了 Windows Defender 防火墙/第三方安全软件,或 macOS 启用了“防火墙”+“阻止所有传入连接”。
怎么确认是防火墙拦截而不是网络/配置问题
用最简方式绕过 Composer 自身逻辑,直接测试底层连通性:
- 运行
curl -I https://packagist.org/packages.json—— 如果也报Connection refused或卡住,基本锁定是系统级拦截 - 换成国内镜像试:
curl -I https://packagist.phpcomposer.com/packages.json(已停用)或curl -I https://mirrors.aliyun.com/composer/packages.json,看是否同样失败 - 临时关掉 Windows Defender 防火墙(控制面板 → Windows Defender 防火墙 → 启用或关闭防火墙),再跑一次
composer update;如果立刻成功,就是它 - macOS 用户检查“系统设置 → 网络 → 防火墙”,点“选项”看是否勾选了“阻止所有传入连接”——这个会误杀出站 TLS 握手
Composer 走代理时被防火墙二次拦截的典型表现
很多人设了 http_proxy 或在 composer.json 里配了 repositories 镜像,但防火墙仍报错,是因为:代理流量(比如走 127.0.0.1:8888)被本地代理工具(Clash、Fiddler、Charles)监听,而某些防火墙会把本地回环地址的出站连接也当成可疑行为拦截。
- 检查是否开了代理:运行
echo $http_proxy(Linux/macOS)或echo %http_proxy%(Windows) - 临时取消代理:
unset http_proxy https_proxy(Linux/macOS)或set http_proxy= && set https_proxy=(Windows) - 如果取消后能通,说明防火墙不信任你代理进程的证书或绑定端口;此时要么把代理工具加进防火墙白名单,要么换用无需本地代理的镜像源(如阿里云、腾讯云)
- 阿里云镜像配置命令:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
Windows 上 Defender 防火墙放行 PHP 和 Composer 的实操步骤
不是所有用户都愿意关防火墙,更稳妥的是精准放行。关键点:防火墙规则要针对 php.exe,不是 composer.bat 或终端进程。
- 找到你的 PHP 安装路径,比如
C:\php\php.exe(可通过where php查) - 打开“高级安全 Windows Defender 防火墙” → 左侧“出站规则” → 右侧“新建规则…” → 选择“程序” → 浏览到
php.exe - 操作选“允许连接”,配置文件选“域、专用、公用”全勾(除非你明确知道只用某一种)
- 规则名写清楚,例如
Allow PHP outbound for Composer - 完成后重启终端,再试
composer update
注意:如果你用的是 WSL2,防火墙规则要加在 Windows 侧,且需额外放行 WSL 的虚拟网卡(vEthernet (WSL));Mac 用户则极少需要改系统防火墙,重点查 Little Snitch 或 CleanMyMac X 这类第三方工具。










