Nexus OSS 3如何阻止Proxy Repository下载my.company开头的工件?
解决Nexus 3阻止Proxy仓库下载特定工件的问题
我能理解你的困惑——Nexus 3的权限和内容控制逻辑确实和Nexus 2、Artifactory不太一样,你之前的操作方向有点偏,我来帮你理清问题和正确的解决方案:
先说说你之前操作的问题
你的思路是创建一个带限制的角色但不分配给用户,但Nexus 3的权限体系默认是允许所有操作,除非你明确添加拒绝规则。现有用户(包括匿名用户)大概率继承了默认角色(比如nx-anonymous)的浏览/读取权限,所以你的空角色根本不会对现有权限产生影响,自然拦不住访问和下载。
正确的解决方案(两种思路,按需选择)
思路1:用内容选择器+拒绝权限(全局控制)
这种方式可以一次性对所有目标Proxy仓库生效,适合统一管控:
- 创建精准的Content Selector
进入Content Selectors页面,新建一个选择器,推荐用GroupId匹配(比路径更准确):
如果你想用路径匹配也可以:format == "maven2" and groupId starts with "my.company"path =~ "/my/company/.*" - 创建拒绝权限
进入Security -> Permissions,点击Create permission选择Repository Permission:- 命名比如
Deny-MyCompany-Artifacts - 选择所有需要限制的Proxy仓库(或者直接选仓库组,如果你的Proxy仓库都在组里)
- 关联你刚才创建的Content Selector
- 关键:在
Actions里勾选read和browse,然后把权限类型设为Deny(不是Allow!)
- 命名比如
- 分配拒绝权限到角色
把这个拒绝权限添加到所有用户会用到的角色里(比如nx-anonymous、nx-users、自定义业务角色)。Nexus的权限规则是拒绝优先,只要有一个拒绝权限,就会覆盖所有允许的权限。
思路2:用Proxy仓库的Routing Rules(仓库级控制)
如果你想针对单个Proxy仓库做限制,或者不想动权限体系,可以用路由规则直接阻断请求:
- 进入目标Proxy仓库的配置页面,找到
Routing模块 - 点击
Add Rule,选择规则类型为Block - 填写匹配模式:
my/company/**(maven的路径格式,对应groupId为my.company的工件) - 保存配置后,这个Proxy仓库会直接拒绝任何请求该路径的工件,连尝试远程下载都不会触发。
为什么之前的操作没生效?
- 你创建的是允许型角色但未分配,而用户的默认角色本来就有浏览/读取权限,Nexus不会因为你有个未使用的角色就改变默认行为。
- Content Selector只有绑定到生效的权限(且被用户继承)时才会起作用,空角色里的选择器相当于不存在。
内容的提问来源于stack exchange,提问作者Benjamin Marwell
相关产品推荐
相关产品推荐

