我通过vagrant设置了几个虚拟机,每个虚拟机都有自己的专用网络IP。出现的问题是,对于其中一个虚拟机,我命名为netcap_backend
,我设置为启动nestjs服务器,但当我尝试访问主机上的端点时,它返回ECONNREFUSED。我有一个简单的GET端点直接设置在192.168.56.101:3000/
。我的主机正在运行Arch,这是该特定VM的配置:
config.vm.define "netcap_backend" do |back|
back.vm.hostname = "netcap-backend"
back.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", env['MEM_BACKEND']]
vb.customize ["modifyvm", :id, "--cpus", env['CPU_BACKEND']]
end
back.vm.network "private_network", ip: env['BACKEND_IP'] # 192.165.56.101
back.vm.provision "ScriptRunAsVagrantUser", privileged: false, type:"shell", path: "#{env['PROVISION_PATH']}/prov_netcap_back.sh"
end
下面是我在nest服务器中的main.ts:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors({
allowedHeaders: '*',
origin: '*',
credentials: true,
});
await app.listen(3000);
}
bootstrap();
奇怪的是,它的配置与我的前端虚拟机相同,并且正在运行一个React,我的主机连接到它没有问题,即使它使用不同的IP。
起初,当我在firefox上尝试一个简单的fetch时,我希望fetch调用返回一个简单的Hello World
,但是,它返回了一个CORS问题,因此在我的main.ts
中额外调用了enableCors()。但这似乎并没有解决问题。然后我用 Postman ping我的路线,这是当我看到ECONREFUSED。然后,我尝试看看我的主机是否可以与VM对话,它可以像ping 192.168.56.101
一样执行得很好,没有网络错误。
一个小更新:尝试了相同的设置,但在windows上,工作完美.
1条答案
按热度按时间62lalag41#
这里发生的错误是,虽然我的前端和后端服务器都使用不同的IP,但它们具有重叠的端口(都使用3000)。至少在我的系统上,这导致只有一个服务器连接到了仅主机网络。解决方案是为每个需要暴露给网络的服务器使用不同的端口号,并重新启动运行该服务器的每个vagrant vm。