答案:局域网配 composer 必须用私有镜像(如 satis)而非仅设代理,因代理不改 dist.url 且 https-proxy 易配错;需确保镜像 url 以 / 结尾、nginx 正确托管静态文件、项目级配置显式禁用 packagist.org 并删 vendor/ 和 composer.lock。

局域网里配 Composer 代理,不是加个 http-proxy 就完事——它只管 HTTP 请求,而 Packagist 全链路走 HTTPS,漏掉 https-proxy 就等于没配。更关键的是:代理和私有镜像不能共存,二者选一,混用必卡在 “Loading composer repositories”。
为什么只设 http-proxy 还是连不上?
Composer 对协议严格分离:http-proxy 仅用于 HTTP 请求(极少),https-proxy 才用于 HTTPS 的 CONNECT 隧道。Packagist、GitHub、所有元数据和 ZIP 下载都走 HTTPS,所以:
-
https-proxy值必须是http://开头(哪怕代理本身监听 TLS 端口),例如http://127.0.0.1:7890 - 填成
https://127.0.0.1:7890或漏协议头(如127.0.0.1:7890)会导致静默 fallback 到直连,最终超时或 502 - 密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword - 验证命令:
composer config -g --list | grep -E "(http|https)-proxy",两行都得有且格式正确
composer config -g repo.packagist 在局域网根本别用
这条命令只改 packages.json 元数据地址,不碰任何包的 dist.url(比如仍指向 https://github.com/monolog/monolog/.../monolog-2.10.0.zip),局域网打不开。真要跑通,必须让 ZIP 文件也能从内网拉取——这靠代理做不到,得靠私有镜像服务(如 Satis/Nexus)并正确暴露静态文件路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 私有镜像 URL 必须以
/结尾,否则 Composer 拼出http://mirror/packages.json变成http://mirrorpackages.json,404 - 项目级配置才可靠:
composer config repo.packagist composer http://your-mirror.internal/(不带-g) - 必须手动加
"packagist.org": false到composer.json根节点(和require同级),不是嵌套在repositories里 - 改完立刻删掉
vendor/和composer.lock,否则旧 lock 里的哈希仍校验外网源
代理和镜像冲突时怎么快速判断?
现象都是卡在 “Loading composer repositories”,但原因截然不同:
- 代理问题:执行
curl -x http://127.0.0.1:7890 -I https://packagist.org/packages.json能返回 200,但composer install -vvv卡住 → 说明代理通,但 Composer 配置错(大概率漏https-proxy或值格式不对) - 镜像问题:运行
composer show monolog/monolog --verbose,看输出里dist.url是否还指向 GitHub → 是,则镜像没接管 ZIP 下载,Nginx root 路径或 MIME 类型(application/json)错了 - CI/宝塔/Docker 场景下,
composer config -g写的是 root 用户配置,但实际运行用户是www、runner、www-data→ 配置根本读不到,必须用项目级配置
最易被忽略的一点:私有镜像服务(如 Satis)本身不“分发”文件,只是静态托管。Nginx 的 root 必须精确指向 output-dir 的子目录(如 root /var/www/satis/web;),多一层少一层都会 404;且 types { application/json json; } 必须显式声明,否则 packages.json 返回 text/plain,Composer 直接跳过。










