3. 代理仓库配置基础:创建代理仓库、配置远程URL、设置Blob Store、配置HTTP/HTTPS连接

代理仓库(Proxy Repository)是 Nexus 缓存命中率优化的核心载体。它作为客户端与远程上游仓库之间的中间层,负责缓存从远程拉取的制品,从而加速后续相同请求的响应速度。本章将系统讲解代理仓库的完整配置流程,包括仓库创建、远程 URL 配置、Blob Store 绑定以及 HTTP/HTTPS 连接调优。

3.1 代理仓库创建流程

在 Nexus Repository Manager 管理界面中,创建代理仓库的路径为:Administration → Repository → Repositories → Create repository。选择对应的包格式(如 maven2、npm、pypi、docker 等),然后选择 proxy 类型。

配置步骤 关键字段 说明
1. 基础设置 Name / Online 仓库名称(全局唯一),勾选 Online 启用
2. 远程存储 Remote Storage URL 上游仓库的完整 URL(如 https://repo1.maven.org/maven2/)
3. 存储配置 Blob Store 选择或新建专用的 Blob Store 用于缓存数据
4. HTTP 设置 User Agent / Connection Timeout 自定义 User-Agent 标识,设置连接超时时间
5. 代理缓存策略 Cache TTL / Maximum Age 控制缓存保留时间,直接影响命中率
最佳实践:建议为每种包格式的代理仓库单独创建 Blob Store,便于后续按存储类型进行磁盘配额管理和性能监控。例如:blob-maven-proxy、blob-npm-proxy。

3.2 远程 URL 配置要点

远程 URL 是代理仓库与上游源站通信的入口。配置错误将直接导致制品拉取失败或缓存失效。以下是常见包格式的远程 URL 示例:

# Maven Central
https://repo1.maven.org/maven2/

# npm 官方源
https://registry.npmjs.org/

# PyPI 官方源
https://pypi.org/simple/

# Docker Hub
https://registry-1.docker.io/

# Google Maven
https://dl.google.com/dl/android/maven2/
注意:部分远程仓库(如 Docker Hub)存在速率限制(Rate Limit),建议在 Nexus 中配置认证信息或使用镜像源(Mirror)来规避限制。同时,确保远程 URL 末尾的斜杠(/)正确,避免 301/302 重定向导致的额外延迟。

3.3 Blob Store 配置与绑定

Blob Store 是 Nexus 存储制品二进制数据的物理后端。代理仓库的缓存数据全部存储在绑定的 Blob Store 中。合理的 Blob Store 配置直接影响缓存读取性能和磁盘利用率。

Blob Store 类型 适用场景 性能特点
File 本地磁盘存储,通用场景 读写稳定,适合大多数代理仓库
S3 对象存储,云原生部署 弹性扩展,但延迟略高于本地磁盘
Google Cloud Storage GCP 环境 与 GCP 生态集成度高
Azure Blob Azure 环境 与 Azure 存储服务深度绑定

创建 Blob Store 的路径:Administration → Repository → Blob Stores → Create Blob Store。选择类型后,配置存储路径(File 类型)或云存储连接信息。建议为代理仓库设置独立的 Blob Store,并启用 Soft Quota 限制最大存储空间,防止磁盘写满。

# 创建 File 类型 Blob Store 示例(通过 REST API)
curl -u admin:admin123 -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "name": "blob-maven-proxy",
    "type": "file",
    "path": "/nexus-data/blobs/maven-proxy",
    "softQuota": {
      "type": "spaceUsedPercentage",
      "limit": 80
    }
  }' \
  "http://localhost:8081/service/rest/v1/blobstores/file"

3.4 HTTP/HTTPS 连接配置

代理仓库与远程源站之间的网络连接质量直接影响缓存填充速度和命中率。Nexus 提供了丰富的 HTTP 连接参数,用于适配不同的网络环境和安全要求。

3.4.1 连接超时与重试

参数 默认值 推荐值(高命中率场景) 说明
Connection Timeout 10000 ms 5000 ms 建立 TCP 连接的超时时间
Socket Timeout 60000 ms 30000 ms 等待数据包的超时时间
Retry Count 3 2 失败后重试次数,过多重试会延迟缓存
User Agent Nexus/3.x 自定义标识 部分源站根据 UA 做限流或路由

3.4.2 HTTPS 与证书配置

当远程 URL 使用 HTTPS 协议时,Nexus 需要信任上游服务器的 SSL/TLS 证书。配置路径:Administration → System → HTTP。

  • 信任自签名证书:将 CA 证书导入 Nexus 的 Java 信任库(cacerts)或通过 HTTP 配置页面上传。
  • 客户端证书认证:如果上游仓库要求双向 TLS,在 HTTP 设置中配置 Keystore 和私钥。
  • 禁用证书验证(不推荐):仅用于测试环境,勾选 Allow any Hostname 和 Trust all SSL Certificates。
性能提示:启用 HTTP Keep-Alive 可以减少频繁建立 TLS 握手的开销。Nexus 默认使用连接池,建议将 Maximum Connections 设置为 50-100,根据并发请求量调整。

3.5 代理仓库配置架构图

下图展示了代理仓库的完整配置架构,从客户端请求到远程源站的数据流向,以及各配置组件的关联关系。

代理仓库配置架构图 代理仓库配置架构图 客户端 Nexus 代理仓库 Name / Online / Blob Store 远程 URL Blob Store (缓存) HTTP/HTTPS 连接 缓存策略 (TTL) 请求制品 未命中时拉取 缓存写入/读取 连接参数控制 超时影响缓存 配置要点 • 远程 URL 必须可访问 • Blob Store 建议独立分配 • 超时时间不宜过长

3.6 配置验证与常见问题

完成代理仓库配置后,建议执行以下验证步骤:

  1. 检查仓库状态:在 Repository 列表中确认仓库状态为 Online。
  2. 测试远程连接:点击仓库详情页的 Test Connection 按钮,确认 Nexus 能成功连接到远程 URL。
  3. 手动拉取制品:通过浏览器或 curl 访问代理仓库 URL,尝试下载一个已知的制品文件。
  4. 查看日志:检查 /nexus-data/log/nexus.log 中是否有连接错误或超时记录。
常见错误:
  • Connection refused:远程 URL 不可达,检查网络策略和防火墙规则。
  • SSL handshake failed:证书不信任,导入正确的 CA 证书或临时禁用证书验证。
  • 413 Request Entity Too Large:Nginx 反向代理限制了上传大小,调整 client_max_body_size。
  • Blob Store 磁盘写满:启用 Soft Quota 并设置合理的告警阈值(如 80%)。

3.7 多代理仓库配置示例

在实际生产环境中,通常需要为同一包格式配置多个代理仓库,以实现负载均衡或故障转移。以下是一个 Maven 代理仓库组的配置示例:

# 创建两个 Maven 代理仓库
# 仓库1:Maven Central 官方源
Name: maven-central-proxy
Remote Storage: https://repo1.maven.org/maven2/
Blob Store: blob-maven-proxy

# 仓库2:阿里云 Maven 镜像(国内加速)
Name: maven-aliyun-proxy
Remote Storage: https://maven.aliyun.com/repository/central
Blob Store: blob-maven-proxy

# 创建 Maven 仓库组,将两个代理仓库加入
Name: maven-public-group
Type: group
Member Repositories: maven-central-proxy, maven-aliyun-proxy

通过仓库组,客户端只需配置一个 URL,Nexus 会自动按顺序从成员仓库中查找制品,优先返回缓存命中结果,从而提升整体缓存命中率。