只配http-proxy仍连不上packagist,因其全量走https,而composer严格分协议路由:http-proxy仅处理http请求,https-proxy才用于https的connect隧道;缺一则https请求fallback直连,导致卡在“loading composer repositories”且静默失败。

为什么只配 http-proxy 仍然连不上 Packagist
因为 Packagist 全量走 HTTPS,而 Composer 对代理是严格分协议路由的:http-proxy 只处理 HTTP 请求,https-proxy 才用于建立 HTTPS 的 CONNECT 隧道。漏掉任一字段,HTTPS 请求就会 fallback 到直连——现象是卡在 Loading composer repositories,无报错、无超时提示,最终静默失败。
-
https-proxy的值必须是http://开头(哪怕代理本身监听 TLS 端口),填成https://127.0.0.1:8080或不带协议头(如127.0.0.1:8080)都会失效 - 密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword,可用php -r "echo rawurlencode('pa@ss/word');"快速生成 - 命令必须加
-g(等价于--global),否则只写入当前项目composer.json,换目录就失效
局部代理配置的正确写法与验证方式
所谓“局部”,是指仅对当前项目生效,不污染全局环境。但注意:Composer 不支持“项目级代理”原生概念,它只认全局配置或项目 composer.json 中的 config 字段——而后者实际会被 composer install 忽略(仅 update 阶段读取)。所以真正可靠的局部代理,只能靠临时覆盖全局配置 + 清理。
- 进入项目目录后执行:
composer config -g http-proxy http://127.0.0.1:1080&&composer config -g https-proxy http://127.0.0.1:1080 - 验证是否写入成功:
composer config -g --list | grep -E "(http|https)-proxy",应看到两行且格式正确 - 执行完操作后,立刻恢复:
composer config -g --unset http-proxy&&composer config -g --unset https-proxy - 不建议在项目
composer.json里写"config": {"http-proxy": "...", "https-proxy": "..."}——它只影响update,且容易和 CI 脚本冲突
公司 NTLM 代理环境下怎么绕过认证失败
Composer 原生不支持 NTLM 认证,设了 http-proxy 也会直接返回 407 Proxy Authentication Required 或 Unable to connect to http://repo.packagist.org。这不是配置问题,是协议不兼容。
- 必须引入中转代理工具,如
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM,再让 Composer 连这个本地地址 - 临时验证是否为 NTLM 导致:运行
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果curl也报407,说明中转层没配好 - 别指望系统级
HTTP_PROXY环境变量——Composer 明确忽略它,只认自己的http-proxy字段 - Windows 下若用 phpstudy/XAMPP,注意其
composer.bat是硬编码调用系统默认php.exe,NTLM 中转可能因 PHP 版本或扩展缺失而失败
代理配好还是慢或失败?快速定位在哪一层断的
现象一致(卡住、超时、无报错),但原因可能在任意一层:本地代理进程未启动、防火墙拦截、中转代理未转发 HTTPS、Composer 缓存未清、甚至 DNS 解析失败。不能只盯着配置文件。
- 先确认代理服务本身是否正常:用
curl -x http://127.0.0.1:1080 -I https://packagist.org/packages.json直接测通 - 再看 Composer 是否真用了代理:加
-vvv参数运行composer update -vvv,观察日志里是否有Using proxy提示及具体请求 URL - 清除 Composer 缓存:
composer clear-cache,否则旧元数据仍指向官方源 - 检查 DNS:执行
nslookup packagist.org,若解析异常,可临时改 hosts 或换 DNS(如114.114.114.114)











