镜像源和代理不能共存,因composer优先匹配repo.packagist直连镜像,跳过代理配置;必须清空repo.packagist及repos.packagist后,再同时设置http-proxy与https-proxy(均以http://开头)方可启用代理。

镜像源和代理不能共存——设了 repo.packagist,http-proxy 和 https-proxy 就完全失效;真要走代理,必须先清掉镜像配置。
为什么镜像和代理配在一起会静默失效
Composer 的请求路由逻辑是:优先匹配 repo.packagist 配置,命中即直连镜像地址(如 https://mirrors.aliyun.com/composer/),此时 http-proxy 和 https-proxy 字段被跳过,不参与任何请求。这不是 bug,是设计行为。
常见错误现象:
- 执行
composer install卡在Loading composer repositories,日志无报错、不超时、也不下载 -
composer config -g --list | grep -E "(http|https)-proxy"显示代理已设,但composer config -g repo.packagist也输出非空 JSON
验证是否真走镜像:composer update -vvv 日志里出现 GET https://mirrors.aliyun.com/composer/packages.json 才算生效;如果看到的是 GET https://packagist.org/packages.json,说明镜像没生效,但代理也没起作用——大概率是两者同时存在导致逻辑短路。
想用代理,必须彻底清空镜像配置
执行以下命令清掉所有镜像相关字段(只留代理):
composer config -g --unset repo.packagist composer config -g --unset repos.packagist
注意:repos.packagist(带 s)是旧版或误配残留,也要一并清理;否则它可能在某些场景下被 fallback 使用。
然后设置代理(两个字段缺一不可):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config -g http-proxy http://127.0.0.1:3128composer config -g https-proxy http://127.0.0.1:3128
关键细节:
-
https-proxy值必须以http://开头,填https://或漏协议头会静默失败 - 若代理需认证,用户名/密码含
@、/、:必须 URL 编码,例如密码pa@ss/word→pa%40ss%2Fword - 企业 NTLM 代理必须本地起中转(如
cntlm),Composer 原生不支持 NTLM
镜像 + 代理的唯一可行组合:代理转发镜像请求
典型适用场景:公司网络策略强制所有 HTTPS 流量过代理(比如防火墙策略),但你仍想用清华、阿里等公开镜像加速。
这时链路是:composer → https-proxy → 公司代理 → 镜像服务器,不是“镜像绕过代理”,而是“镜像地址本身被代理转发”。前提是:
- 镜像 URL 必须可被代理访问(比如不能是内网地址)
- 代理能正常解析镜像域名(
nslookup mirrors.tuna.tsinghua.edu.cn要通) - 镜像返回状态码不能是
403 Forbidden(常见于代理拦截了User-Agent或拒绝非浏览器请求)
配置方式仍是清空 repo.packagist,只设 https-proxy,然后确保镜像地址写在 repositories 数组里(项目级)或通过其他机制显式引用——但注意:全局 repo.packagist 一旦存在,就堵死了这条路径。
安全配置下如何兼顾镜像与代理
Composer 2.5+ 支持签名验证,但国内镜像普遍不提供 signature 字段。若你启用了 security.signature true,又配了 repo.packagist,Composer 会自动降级为无校验模式。
真正安全的做法是:
- 保留官方源(不设
repo.packagist) - 启用签名:
composer config -g security.signature true - 仅对元数据请求走镜像代理(需自建反向代理服务,把
https://packagist.org/packages.json请求转发到镜像,但包文件仍从官方 CDN 下载)
这个方案不依赖 Composer 原生命令,需要额外部署 Nginx/Caddy,且镜像 URL 必须严格匹配官方路径结构——稍有偏差就会触发 404 或 fallback 到无校验模式。实际落地成本高,多数团队直接选“清镜像 + 配代理”或“只用镜像”。










