Nexus 为 Visual Studio 提供 Nuget 代理

发布时间 2023-03-22 21:53:01作者: 乔京飞

现在绝大多数企业,为了保护公司利益,都会在内网进行代码开发,内网肯定是无法上网的。对于 .net 来说,如果能够使内网的机器,通过 Nuget 下载到外网的第三方类库,是一件很重要的事情,这关系着开发工作效率。Nexus 是一款很不错的私服代理工具,能够为 Visual Studio 的 Nuget 实现代理访问功能。使用 Nexus 进行代理 Nuget 的好处是:

  • Nexus 搭建简单,搭建完成后,自带 Nuget 代理功能,在 Visual Studio 把 Nexus 的代理地址添加到 Nuget 配置中即可。
  • 保障外网访问的安全,Nexus 的默认服务端口是 8081,只需要给安装了 Nexus 的服务器防火墙开通 8081 端口即可,确保内网电脑只能通过 8081 访问 Nexus 的 Nuget 代理下载第三方类库,无法进行其它方面的外网访问。

下面我们就一起看看,如何使用 Nexus 为 Visual Studio 为 Nuget 提供代理访问吧。


一、环境准备

为了能够更加真实,我使用 VMware 准备了 2 台虚拟机,具体细节如下:

  • 一台 Windows Server 2019 的虚拟机,添加了两块网卡,一个连接外网,一个连接内网。
  • 一台 Windows 10 虚拟机,只添加了一块网卡,连接内网。

我自己的笔记本电脑(也就是物理机),通过无线网卡连接到路由器,自动获取 ip 地址。

连接外网的网卡,使用的是桥接模式。桥接模式相当于,跟我的笔记本电脑一样,直接连接到路由器,自动获取 ip 地址,所以外网的网卡跟我的笔记本电脑的无线网卡,是同一个网段的,能够上外网。

连接内网的网卡,使用的是仅主机模式。我的笔记本电脑,安装了 VMware 之后,网络连接中就多了一个 WMware Network Adapter VMnet1 的图标,它相当于一个没有连接外网的路由器。

image

如果我笔记本电脑上的多个虚拟机,都有网卡连接到 VMnet1 这个路由器上,这多个虚拟机之间就组建了一个无法上网的内网局域网,该局域网的多个虚拟机之间是可以互相通信的。

既然 VMnet1 是一个路由器,因此连接到 VMnet1 的网卡是可以自动获取 ip 地址的。但是随着时间的推移,自动获取的 ip 地址很可能会变化,在真实的环境中肯定是不合适的,因此这里就手动设置一下 ip 地址。

对于 Win2019 的内网网卡,设置的 ip 地址如下(对于拥有双网卡的服务器来说,最好不要给内网网卡设置默认网关,否则有可能会导致连接外网的网卡无法上网):

image

对于 Win10 的内网网卡,设置的 ip 地址如下:

image

对于 Win2019 来说,在其防火墙的入站规则中,只开通 8081 端口(也就是 Nexus 服务启动的端口),其它端口都是关闭的。确保 Win10 的内网机器,只能通过 8081 端口访问 Win2019 服务器的 Nexus 服务,这样比较贴近真实的场景。

另外需要注意的是:默认情况下 Windows Server 2019 不能被 Ping 通,需要在防火墙中启用 ICMPv4-In 规则。

image

最后就是就是在 Windwos Server 2019 上安装 Nexus 服务即可,有关安装的具体细节,参考上一篇博客,Nexus 启用匿名访问,这里就不再赘述。我在 Win10 上安装了 Visual Studio 2022(安装任何版本的 VS 都可以)。


二、为 VS 配置 Nuget 代理

在 Win10 中,打开 Edge 浏览器,地址栏上输入 Win2019 内网网卡的地址加 8081 端口(http://192.168.6.111:8081)访问 Nexus 服务页面,登录进行之后,按下图所示进行操作,能够看到 Nexus 安装好之后,自带了 nuget.org-proxy 的仓库。

image

点击 nuget.org-proxy 进入具体设置的界面,就能够看到仓库地址,以及设置的远程地址。

image

打开 Visual Studio 2022 ,随便创建一个 C# 项目,进入 Nuget 包管理器的程序包源设置界面,删除原有的两个配置。

image

把 Nexus 代理 Nuget 的地址添加进入,名称随意取,这里就叫 NexusProxy 了。

image

然后就能够看到所有第三方的类库包了,可以为项目查询并安装所需要的 Nuget 包了。

image


OK ,到此为止,有关 Visual Studio 使用 Nexus 作为 Nuget 代理的介绍,已经介绍完毕,希望对大家有用。