composer配置https-proxy必须用http://协议,因其https请求依赖connect隧道,仅识别http://开头地址;填https://或漏协议会导致https请求静默直连、卡在loading composer repositories或报connection refused。

composer config -g 配置 https-proxy 必须用 http:// 协议
Composer 对 HTTPS 请求走的是 CONNECT 隧道,但它的 https-proxy 配置项只认 http:// 开头的地址——哪怕你本地代理(如 Clash、Charles)监听的是 TLS 端口,也必须写成 http://127.0.0.1:7890。填成 https://127.0.0.1:7890 或漏掉协议头,会导致所有 HTTPS 请求静默 fallback 到直连,最终卡在 Loading composer repositories 或报 Connection refused。
composer config -g http-proxy http://127.0.0.1:7890composer config -g https-proxy http://127.0.0.1:7890- 带认证时,密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword - 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",两行都得有且格式正确
repo.packagist.org.proxy 和 repo.packagist.org.ssl-proxy 是独立字段
从 Composer 2.2 起,推荐用 repo.packagist.org.proxy 和 repo.packagist.org.ssl-proxy 替代全局 http-proxy/https-proxy,好处是只对 Packagist 生效,不影响其他仓库(比如私有 Git 或 Nexus)。这两个字段互不覆盖,缺一不可:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
composer config -g repo.packagist.org.proxy http://127.0.0.1:7890composer config -g repo.packagist.org.ssl-proxy http://127.0.0.1:7890- 如果只设了
.proxy没设.ssl-proxy,HTTPS 请求仍直连,现象和没配一样 - SOCKS5 支持需 Composer ≥ 2.2,写法为
socks5://127.0.0.1:7891,旧版会忽略
NTLM 代理必须靠中转工具,Composer 原生不支持
公司内网常见 NTLM 认证代理(比如 Windows 域环境),直接设 http-proxy 会返回 407 Proxy Authentication Required 或 Unable to connect to http://repo.packagist.org。这不是配置错,是协议不兼容。
- 必须引入中转代理:如
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM - 再让 Composer 连这个本地地址:
composer config -g https-proxy http://127.0.0.1:3128 - 临时验证:用
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果也报 407,说明中转层没配通
镜像源和代理不能共存,否则行为不可控
想加速又想走代理?不行。一旦配置了 repo.packagist 镜像(如阿里云),Composer 就完全绕过 Packagist 官方域名,不再触发代理规则。两者逻辑互斥:
- 走镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾/) - 走代理:必须清空镜像配置,否则
repo.packagist.org.proxy不生效 - 验证镜像是否生效:
composer config -g repo.packagist输出必须是完整 JSON,不是空或Key "repo.packagist" does not exist - CI 或 Docker 环境下,全局配置可能不生效,优先考虑项目级
composer.json中写"repositories"










