composer怎么在防火墙严格限制下使用依赖?

3次阅读

换镜像源是最有效解法,优先配置阿里云镜像https://mirrors.aliyun.com/composer/并验证可用性,同时处理dist下载直连github、插件绕过及https证书问题。

composer怎么在防火墙严格限制下使用依赖?

composer install 被防火墙拦截时,packagist.org 请求失败怎么办

直接换镜像源是最有效解法。国内多数企业防火墙只放行白名单域名,packagist.orggithub.com 常被阻断,但镜像源走国内 CDN 或代理通道,请求路径不同,容易过审。

实操建议:

  • 优先用 composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用,仅作历史参考)或当前可用的 https://packagist.laravel-china.org(注意:该站已于 2023 年停止维护,实际应切换为 https://mirrors.aliyun.com/composer/
  • 确认镜像可用性:运行 curl -I https://mirrors.aliyun.com/composer/packages.json,返回 200 OK 才算真正通
  • 若公司强制要求所有流量经统一代理,需额外配置 http_proxy 环境变量,且确保 Composer 能读取它(某些旧版需要加 --no-plugins 避免插件干扰)

为什么 composer update 仍会访问 GitHub?

因为很多包的 dist 下载地址写死为 github.com,即使换了 packagist 镜像,Composer 仍会按 composer.json 中的 dist.url 直连下载 ZIP 包。这是最常被忽略的「二次拦截」点。

解决办法:

  • 全局启用国内 dist 镜像:执行 composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/
  • 对单个项目,可手动在 composer.json 里加 "repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}]
  • 检查是否启用了 fxp/composer-asset-plugin 类插件——它们常绕过镜像设置直连 GitHub,建议卸载并改用 composer/installers + 官方 asset-packagist 替代

composer create-project 卡在 downloading 后无响应

本质是模板项目(如 Laravel)的 composer.json 里声明了大量 GitHub 仓库依赖,且默认不走镜像。此时不是网络慢,而是连接被静默丢弃,超时后才报错。

快速绕过方式:

  • 先用 git clone 拉下框架代码(比如 git clone --depth=1 https://gitee.com/laravel/framework.git),再进目录跑 composer install --no-scripts
  • 临时禁用 VCS:设环境变量 COMPOSER_DISABLE_NETWORK=1,再配合 --prefer-dist 和本地 vendor 缓存复用
  • 如果允许离线部署,提前在另一台能联网的机器上跑 composer install --no-dev --prefer-dist,打包整个 vendor 目录带过去

HTTPS 证书校验失败或 TLS 版本不兼容

部分企业防火墙中间人代理会替换 HTTPS 证书,导致 Composer 报 cURL Error 60: ssl certificate problemTLS 1.0 is disabled。这不是配置问题,是握手阶段被干预。

安全前提下的应对措施:

  • composer config -g secure-http false 临时降级到 HTTP(仅限内网可信环境,且需确认镜像源同时提供 HTTP 入口)
  • 若必须走 HTTPS,导出防火墙 CA 证书(通常管理员可提供),然后设 export COMPOSER_CAFILE=/path/to/company-ca.crt
  • 避免用 --disable-tls:该参数已被废弃,新版 Composer 不识别,强行加会导致命令解析失败

真正卡住的地方往往不在镜像配置本身,而在 dist URL、插件行为、CA 信任链这三处。调不通时,先 composer install -v 看最后一条请求是什么,再决定动哪根线。

text=ZqhQzanResources