只配 http-proxy 无法连接私有仓库,因为其全量走 https,而 http-proxy 仅处理 http 请求;https 请求必须配置 https-proxy(值须为 http:// 开头)建立 connect 隧道,缺一则直连失败,表现为卡在“loading composer repositories”或报 502/connection refused。

只配 http-proxy 为什么私有仓库还是连不上
因为私有 Composer 仓库(如 Artifactory、Satis、自建镜像)几乎全走 HTTPS,而 http-proxy 只影响 HTTP 请求;HTTPS 请求必须由 https-proxy 字段接管,通过 CONNECT 隧道转发。漏掉它,Composer 就会尝试直连——在企业内网或代理环境下,这通常表现为静默超时、卡在 Loading composer repositories,或最终报 502 Bad Gateway / Connection refused。
关键点:
-
https-proxy的值必须是http://开头(例如http://127.0.0.1:8080),哪怕你的代理本身监听 TLS 端口——这是 Composer 的硬性约定,填https://或不写协议头都会失效 - 必须加
-g(即--global)才写入全局配置;否则只改当前项目composer.json,换目录就丢 - 运行
composer config -g --list | grep -E "(http|https)-proxy",确认两行都存在且格式正确
auth.json 和代理共存时的认证优先级
代理负责网络层通路,auth.json 负责仓库级认证,二者不冲突但需注意顺序:Composer 先走代理发出请求,再由远端仓库(如 Artifactory、Bitbucket)校验凭证。所以即使开了代理,仍要确保 auth.json 正确落位。
常见踩坑:
- 把
auth.json放错位置:全局应放在~/.composer/auth.json,项目级放项目根目录,且必须chmod 600防泄漏 - Bitbucket 必须用 App Password,并写成
http-basic结构,不能只写"bitbucket.org": { "consumer-key": "..." } - GitHub/GitLab 的 OAuth token 要用
composer config -g github-oauth.github.com <token></token>单独配置,不走auth.json
私有仓库 URL 后缀和 packagist.org 冲突
即使代理和认证都对了,composer install 仍可能 fallback 到 packagist.org 并失败——根本原因是 Composer 默认启用官方源,私有仓库只是“备选”。它不会主动去你配的私有地址找包,除非明确关掉默认源。
必须在项目 composer.json 的根层级加这一行:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{"packagist.org": false}
同时确保:
- 私有仓库
type是composer(不是package或空),url以/结尾(例如"https://satis.example.com/") - Artifactory/Satis 的
packages.json能被直接curl -I https://satis.example.com/packages.json访问到(返回 200) - 如果用了虚拟仓库聚合,后端至少有一个
type: composer的本地/远程源,Generic 类型不兼容
CI/CD 环境下代理和认证的组合写法
服务器或容器里不能依赖交互式配置,推荐用环境变量统一注入:
设置代理:
export HTTP_PROXY="http://127.0.0.1:8080"<br>export HTTPS_PROXY="http://127.0.0.1:8080"
但注意:Composer 不会自动读取系统环境变量,仍需显式写入配置:
composer config -g http-proxy "$HTTP_PROXY"<br>composer config -g https-proxy "$HTTPS_PROXY"
认证信息用 COMPOSER_AUTH 注入最安全:
export COMPOSER_AUTH='{"http-basic": {"repo.example.com": {"username": "ci", "password": "xxx"}}}'
这个变量优先级高于 auth.json,且避免文件落盘。唯一容易被忽略的是:COMPOSER_AUTH 必须是合法 JSON 字符串,引号要转义,单引号外层、双引号内层是 Bash 下最稳的写法。










