Composer报403主因是GitHub API超限未配Token或镜像源失效;先看报错URL是否含api.github.com或镜像域名,再用composer update -vvv和curl验证,切官方源或换清华/阿里镜像可快速定位修复。

Composer安装报403,基本不是你没权限装包,而是请求被服务器明确拒之门外——核心就两条:GitHub API 调用超限且没带 Token,或镜像源配置错/已失效。
怎么看是 GitHub 还是镜像源的问题
先盯住报错 URL:https://api.github.com/ 出现在错误里?那就是 GitHub 认证没跟上;如果错在 https://mirrors.aliyun.com/composer/ 或 https://packagist.phpcomposer.com/,说明镜像挂了或配置不对。
- 运行
composer update -vvv,看卡在哪条 HTTP 请求上,URL 一眼就能定位源头 - 用
curl -I -H "Accept: application/vnd.github.v3+json" https://api.github.com/rate_limit查剩余调用次数,X-RateLimit-Remaining: 0就是 GitHub 限流实锤 -
packagist.phpcomposer.com自 2022 年起已下线,还在用它必 403;packagist.laravel-china.org也早在 2023 年底停服
github-oauth 配置为什么总不生效
最常见原因是域名写错:github.com 不能写成 api.github.com、www.github.com 或带 https:// —— Composer 只做 host 字符串精确匹配,写错等于没配。
- 正确命令是:
composer config --global github-oauth.github.com ghp_xxx - 配完立刻检查:
composer config --global --list | grep github-oauth,输出应含"github.com": "ghp_..." - Token 必须勾选
repo和read:packages;复制时带空格或换行会导致静默失效,可用echo "$TOKEN" | hexdump -C验证 -
~/.composer/auth.json权限必须是600(Linux/macOS),否则 Composer 直接忽略该文件
镜像源返回 403 的真实原因和验证方式
有些镜像(比如旧版 Laravel China 或某些企业反代)上游不可达时,会伪造 403 响应,而不是透传 502 或 404,导致误判。还有一类是防火墙拦截了默认的 User-Agent: Composer/2.x。
- 用
curl -v -A "Composer/2.5" https://mirrors.aliyun.com/composer/packages.json模拟 Composer 请求,看是否同样返回 403 - 临时切回官方源验证:
composer config -g repo.packagist composer https://packagist.org,如果切完就正常,原镜像就是假死 - 国内仅推荐两个稳定镜像:
https://mirrors.aliyun.com/composer/和https://mirrors.tuna.tsinghua.edu.cn/composer/(末尾斜杠不能少)
真正容易被忽略的是:CI 环境中硬编码 Token 是高危操作,必须用 GITHUB_TOKEN 环境变量注入;另外,项目级 auth.json 不加 --auth 参数不会被读取,全局配置才是默认行为。


















