composer不直接读取http_proxy环境变量,需通过composer config -g http-proxy/https-proxy配置并验证生效,且国内镜像源会完全绕过代理设置。

Composer 代理配置不是加个 http_proxy 就能跑通的,它受 PHP 扩展、系统环境变量作用域、镜像源优先级三重限制——多数“配了没用”问题出在变量没传进 PHP 进程,或被项目级配置覆盖。
为什么 http_proxy 环境变量对 Composer 没反应
Composer 本身不直接读取 http_proxy,它依赖 PHP 的 stream_context_create() 和底层 cURL/openssl 行为。而 Windows CMD/PowerShell、Linux 的非登录 shell、Docker 容器、CI 环境中,http_proxy 很容易丢失或未传递给 PHP 进程。
- 本地终端设了
export http_proxy=http://127.0.0.1:7890,但composer diagnose显示HTTP proxy support: disabled→ 说明 PHP 没拿到该变量,常见于 WSL 或 IDE 内置终端未加载 shell 配置 - GitLab CI 中写
variables: { http_proxy: "http://..." },但composer install仍超时 → CI runner 启动的是非交互式 shell,需显式用env块注入,或改用config命令硬编码 - Windows 上用 PowerShell 设置
$env:http_proxy="http://...",但新打开的 CMD 不继承 → PowerShell 和 CMD 的环境变量不共享,必须在对应终端里重复设置
composer config -g 配代理比环境变量更可靠
全局配置会写入 ~/.composer/config.json(Windows 是 %APPDATA%\Composer\config.json),PHP 进程启动时自动加载,绕过 shell 传递问题。
- 设 HTTP 代理:
composer config -g http-proxy http://127.0.0.1:7890 - 设 HTTPS 代理(必须单独配):
composer config -g https-proxy http://127.0.0.1:7890 - 取消代理:
composer config -g --unset http-proxy和composer config -g --unset https-proxy - 验证是否生效:
composer config -g http-proxy应输出地址;composer diagnose的 “HTTP proxy support” 行应显示enabled
注意:https-proxy 必须是 http:// 协议地址(如 http://127.0.0.1:7890),不是 https:// —— Composer 不支持 HTTPS 代理隧道,强行填 https:// 会导致连接失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
国内镜像源优先于代理,别混用
如果你在大陆,http-proxy 或 https-proxy 配置会被国内镜像源完全绕过。此时代理不仅无效,还可能因 DNS 解析冲突导致更慢。
- 推荐先换镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果镜像源也失效(比如阿里云临时维护),再 fallback 到代理;不要同时开镜像 + 代理,Composer 会优先走镜像 URL,代理字段被忽略
- 检查是否被项目级配置覆盖:
cat composer.json | grep -A5 repositories,若存在"repositories"字段且含"url": "https://packagist.org",它会压倒全局镜像设置
Windows 下代理 + OpenSSL 组合坑最多
Win11 上启用代理后常报 The openssl extension is required 或卡在 Loading composer repositories,这不是代理问题,而是 PHP 在代理环境下对证书链校验更严格。
- 确认
openssl.cafile已配置:在php.ini中添加openssl.cafile="C:\php\cacert.pem"(下载 cacert.pem 放到该路径) - 禁用证书校验(仅调试):
composer config -g secure-http false,但上线前必须关掉 - 代理软件(如 Clash、Proxifier)若启用了 TUN 模式,可能干扰 PHP 的 socket 层,换用 HTTP/Socks5 代理模式更稳
- Windows Defender 实时防护 + 代理共存时,会反复扫描每个包的 zip 流 → 临时关闭实时保护,或把
%APPDATA%\Composer加入排除列表
真正麻烦的不是配代理,而是你永远不知道变量传没传进 PHP、镜像有没有被覆盖、证书链是不是断了——每次失败都得从 composer diagnose 开始查起,而不是直接重装 Composer。










