Composer报错Connection refused_解决Composer防火墙拦截问题【避坑】

3次阅读

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

Composer报错Connection refused_解决Composer防火墙拦截问题【避坑】

Composer install/update 报错 “Connection refused” 是防火墙或代理在拦请求

绝大多数情况下,composer installcomposer 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_proxylinux/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:phpphp.exe(可通过 where php 查)
  • 打开“高级安全 Windows Defender 防火墙” → 左侧“出站规则” → 右侧“新建规则…” → 选择“程序” → 浏览到 php.exe
  • 操作选“允许连接”,配置文件选“域、专用、公用”全勾(除非你明确知道只用某一种)
  • 规则名写清楚,例如 Allow PHP outbound for Composer
  • 完成后重启终端,再试 composer update

注意:如果你用的是 WSL2,防火墙规则要加在 Windows 侧,且需额外放行 WSL 的虚拟网卡(vEthernet (WSL));Mac 用户则极少需要改系统防火墙,重点查 Little Snitch 或 CleanMyMac X 这类第三方工具。

text=ZqhQzanResources