Composer install 连接 GitHub 失败主因是网络层问题,非配置错误;推荐用阿里云镜像源替代 packagist.org,并配置 GitHub Token 提升 API 限额,调试时可用 -v 查看详细错误。

composer install 时提示 Failed to connect to github.com port 443
这是 Composer 默认走 HTTPS 协议去 GitHub 拉包,但本地网络(比如公司代理、DNS 污染、IPv6 失效)卡在 TLS 握手或 DNS 解析阶段。不是 Composer 坏了,是它太“守规矩”——死守 https://github.com 这条路,不自动降级或换道。
实操建议:
- 先确认能否手动访问:
curl -I https://api.github.com,如果超时或报SSL certificate problem,说明是网络层问题,不是 Composer 配置问题 - 临时绕过证书验证(仅调试用):
git config --global http.sslVerify false,但别长期开着,有安全风险 - 强制 Composer 走 HTTP(不推荐):改
composer.json的repositories,把packagist.org换成http://packagist.org—— 现代 Composer 版本会直接拒绝,报HTTP is not allowed
用镜像源替换 packagist.org 是最稳的方案
国内用 https://packagist.phpcomposer.com 或 https://mirrors.aliyun.com/composer/ 是成熟解法,本质是把包元数据查询和 ZIP 下载都切到国内节点,完全避开 GitHub 直连。
注意点:
- 阿里云镜像已默认启用 HTTPS,无需额外配证书;PHP Composer 镜像站已停更,别再用
phpcomposer.com - 全局设置(影响所有项目):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 单项目设置(推荐):
composer config repo.packagist composer https://mirrors.aliyun.com/composer/,执行后会在项目根目录生成composer.json的repositories字段 - 设完立刻生效,不用清缓存;但已有锁文件(
composer.lock)里的 URL 还是旧的,建议删掉再composer install
GitHub API 限速触发 403 rate limit exceeded 错误
Composer 在安装含 GitHub 仓库的包(比如 "monolog/monolog": "dev-main")时,会调 GitHub API 查 commit、tag,而未登录用户每小时只有 60 次额度。一旦超限,就卡住并报错。
解决方法很简单:
- 用 GitHub Token 绑定 Composer:
composer config -g github-oauth.github.com your_token_here,Token 在 GitHub Settings → Developer settings → Personal access tokens → Generate new token(勾选public_repo即可) - Token 不要硬写进项目
composer.json,必须用-g全局配置,否则泄露风险高 - 设完后,
composer install会自动带Authorization: Bearer ...请求头,额度升到 5000 次/小时
HTTPS 代理环境下 composer update 卡死或报 SSL 错误
公司内网常用 HTTP 代理(如 http://proxy.company.com:8080),但 Composer 的 https_proxy 环境变量默认不走隧道(CONNECT),导致 TLS 握手失败。
关键动作:
- 确认代理支持 HTTPS 隧道:运行
curl -x http://proxy.company.com:8080 -I https://api.github.com,成功才继续 - 正确设置环境变量:
export https_proxy=http://proxy.company.com:8080(注意是http://开头,不是https://) - Composer 本身不读
HTTPS_PROXY(全大写),只认小写的https_proxy;Windows 用户用set https_proxy=...,PowerShell 用$env:https_proxy=... - 如果代理需认证,写成
http://user:pass@proxy.company.com:8080,密码里有特殊字符记得 URL 编码
真正麻烦的不是哪条命令没敲对,而是错误混在一起:DNS 解析失败、TLS 握手失败、GitHub API 限速、代理隧道不通,它们表现都是“连不上”,但得一层层剥开看日志。用 composer install -v 才能看到真实请求地址和失败环节,比猜快得多。











