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-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/
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。
Maximum Connections 设置为 50-100,根据并发请求量调整。
3.5 代理仓库配置架构图
下图展示了代理仓库的完整配置架构,从客户端请求到远程源站的数据流向,以及各配置组件的关联关系。
3.6 配置验证与常见问题
完成代理仓库配置后,建议执行以下验证步骤:
- 检查仓库状态:在 Repository 列表中确认仓库状态为
Online。 - 测试远程连接:点击仓库详情页的 Test Connection 按钮,确认 Nexus 能成功连接到远程 URL。
- 手动拉取制品:通过浏览器或 curl 访问代理仓库 URL,尝试下载一个已知的制品文件。
- 查看日志:检查
/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 会自动按顺序从成员仓库中查找制品,优先返回缓存命中结果,从而提升整体缓存命中率。