Nexus社区版权益阉割--一文告诉你有哪些版本可以选择
# 前言
最近折腾 Nexus,发现默认部署的最新版本首页有组件数量限制的展示,之前一直没有留意,经过一番了解之后,发现 Nexus 社区版的权益,也在进一步收紧,如果公司打算部署一个 Nexus,做好版本选择就非常关键。
# 版本之辨
Nexus 的组件限制,大致有如下几个版本节点:
- 官方在
3.66.0版本中增加了组件和请求数等相关监测指标。详见发版日志 (opens new window) - 一直到
3.76.1版本,监测功能正常工作,当组件达到10w个会有建议提醒,但不会限制使用。 - 从
3.77.0版本开始,组件数10w,日请求20w规则正式生效,当某个指标达到上限之后,会进入30 天宽限期,宽限期内读写正常,如果指标降低到上限以内,到期后正常使用,否则将会无法写入。详见发版日志 (opens new window) - 从
3.87.0版本开始,组件数上限降为4w,日请求数降为10w。详见发版日志 (opens new window)
在 3.87.0进一步降低限制之后,开源社区即有人提出担忧:883 (opens new window)

# 验证限制
考虑到有一些版本是统计而不限制,有一些版本是统计且限制,这里用脚本针对几个版本做一下验证测试。
快速部署:
docker run -itd -p 9000:8081 docker.cnb.cool/znb/images/nexus3:3.76.1
docker run -itd -p 9001:8081 docker.cnb.cool/znb/images/nexus3:3.86.3
docker run -itd -p 9002:8081 docker.cnb.cool/znb/images/nexus3
2
3
首先创建一个 raw 类型的仓库,接着通过如下 go 脚本,并发上传随机文件,然后静待一阵儿时间,到达统计周期,统计信息生效。
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"sync"
"time"
)
const (
NexusURL = "http://localhost:9000/repository/raw/"
Username = "admin"
Password = "admin"
TotalFiles = 200004 // 目标上传总数
// TotalFiles = 2 // 目标上传总数
MaxWorkers = 200 // 并发数,根据机器性能调整
)
func main() {
start := time.Now()
var wg sync.WaitGroup
jobs := make(chan int, TotalFiles)
// 启动 Worker 池
for w := 1; w <= MaxWorkers; w++ {
wg.Add(1)
go worker(w, jobs, &wg)
}
// 分发任务
for i := 1; i <= TotalFiles; i++ {
jobs <- i
}
close(jobs)
wg.Wait()
fmt.Printf("\n任务完成!总耗时: %v\n", time.Since(start))
}
func worker(id int, jobs <-chan int, wg *sync.WaitGroup) {
defer wg.Done()
client := &http.Client{Timeout: 30 * time.Second}
for j := range jobs {
fileName := fmt.Sprintf("test-file-%d.txt", j)
uploadURL := NexusURL + fileName
// 创建一个空的 Buffer 作为文件内容
data := bytes.NewReader([]byte(""))
req, err := http.NewRequest("PUT", uploadURL, data)
if err != nil {
fmt.Printf("Worker %d: 创建请求失败 %s\n", id, fileName)
continue
}
req.SetBasicAuth(Username, Password)
resp, err := client.Do(req)
if err != nil {
fmt.Printf("Worker %d: 上传失败 %s, 错误: %v\n", id, fileName, err)
continue
}
// 必须关闭 Body 以复用连接
io.Copy(io.Discard, resp.Body)
resp.Body.Close()
if resp.StatusCode >= 200 && resp.StatusCode < 300 {
if j%100 == 0 {
fmt.Printf("\r进度: 已上传 %d/%d", j, TotalFiles)
}
} else {
fmt.Printf("\nWorker %d: 触发限制或错误! 文件: %s, 状态码: %d\n", id, fileName, resp.StatusCode)
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
实测结果如下:
3.76.1
![[Pasted image 20260117160915.png]]
能够看到统计建议是不要超过 10w,实际写入 20w,没有任何影响,也没有强制升级提示。
3.86.3

提示:30 Days RemainingThis instance of Nexus Repository Community Edition has exceeded its usage limit. Limits will be enforced starting February 16, 2026, when new components can no longer be added.
可以看到写入超限之后,会提示进入 30 天宽限期,要么对组件进行清理,要么付费升级解锁限制。
3.88.0

最新版本可以看到组件数达到 4w 即会触发上限提醒。
# 镜像抢救
结合如上信息,我个人建议部署时优先选择 3.76.1 版本进行部署,如果能够预见规模不会很大,那么可以考虑选择 3.86.3。
为了提前预防官方后期进一步降低权益,甚至对制品进行删库,我这里将如上两个版本都做了相应归档,有需要的同学,可以在这里获取。
地址:nexus3-docker (opens new window)

其中的 pack 标签,是考虑到可能有同学不习惯使用 docker 部署,就把对应的软件包也做了下载归档。
$ docker run -it docker.cnb.cool/znb/images/nexus3:pack ls /root
nexus-3.76.1-01-unix.tar.gz
nexus-3.86.3-01-linux-aarch_64.tar.gz
nexus-3.86.3-01-linux-x86_64.tar.gz
2
3
4
5
三个制品包,放到了 pack 标签的镜像中,可按需下载使用。如果你还有其他需要使用的版本希望我同步到这个仓库,欢迎评论区留言告诉我。
- 02
- 学习周刊-总第246期-2026年第03周01-15
- 03
- 学习周刊-总第245期-2026年第02周01-08
|