composer只认http-proxy和https-proxy两个字段,必须同时配置且格式严格:https-proxy值须以http://开头,密码含特殊字符需url编码;代理与镜像互斥,共存将导致直连失败。

Composer 读代理配置时,只认 http-proxy 和 https-proxy 两个字段,且必须同时存在、格式严格;它不读系统环境变量,也不按“优先级”合并多个代理配置——写几个就用几个,但只生效第一个匹配项。
Composer 怎么找代理配置
它按固定顺序查找,找到即停,不会叠加或 fallback:
- 先查当前项目
composer.json的config.http-proxy/config.https-proxy - 没命中则查全局配置
~/.composer/config.json(Windows 是%APPDATA%\Composer\config.json) - 项目级和全局级不会合并,后者仅当项目级完全未定义时才生效
-
HTTP_PROXY、HTTPS_PROXY等系统环境变量被彻底忽略,哪怕你 export 了也没用
为什么配了 http-proxy 还连不上 packagist.org
因为 packagist.org 全量走 HTTPS,而 http-proxy 只管 HTTP 请求,https-proxy 才负责建立 CONNECT 隧道。漏掉任意一个,就会卡在 “Loading composer repositories” 且无明确报错。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
https-proxy的值必须是http://开头(不是https://),哪怕代理本身监听 TLS 端口 - 填成
https://127.0.0.1:8080或127.0.0.1:8080→ 静默 fallback 到直连,最终超时或 502 - 密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword - 验证是否生效:
composer config -g --list | grep -E "(http|https)-proxy",两行都得有且协议头正确
代理和镜像能共存吗
不能。两者逻辑冲突:代理是网络层转发,镜像是元数据源替换。一旦配了代理,Composer 会尝试通过代理连所有仓库(包括你写的镜像 URL),结果可能绕过镜像、直连失败,或触发双重代理错误。
- 国内开发推荐用镜像(如
https://mirrors.aliyun.com/composer/),不用代理 - 公司内网受限环境才用代理,此时应禁用镜像,避免
repositories数组里混写镜像 URL - CI/CD 中若同时设了
http-proxy和repo.packagist,大概率导致元数据拉取失败,需删掉镜像配置,只留代理
NTLM 代理怎么办
Composer 原生不支持 NTLM 认证,设了 http-proxy 也会直接返回 407 Proxy Authentication Required。
- 必须引入中转代理工具,比如
cntlm或px,让它们监听127.0.0.1:3128并处理 NTLM - 再把 Composer 的
http-proxy和https-proxy都指向这个本地地址 - 验证方式:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果 curl 也报 407,说明中转层没配好
最易被忽略的是:代理配置生效后,composer.lock 文件里的包来源记录仍可能指向旧地址,删掉 vendor 和 composer.lock 再 composer install 才算真正切换成功。










