我在私有子网中有一个EC2实例。
我在端口8080上使用nohup部署了Java Spring-boot应用程序
我在AngularJS中有另一个前端应用程序,它在端口9000的同一EC2上使用grunt和pm2运行。
前端应用程序与localhost上的java后端通信。
在前端代码中,我使用$http
库来调用Java API,如下所示:
$http({
method: 'GET',
url: 'http://localhost:8080/myserv/getdata',
headers: {
'Content-Type': '*/*'
}
}).then(function (response) {
// processing data...
},
function (err) {
console.log('ERROR: ' + JSON.stringify(err));
});
EC2实例本身在专用网络上,并通过ELB公开,该ELB将所有Internet通信重定向到EC2上的localhost端口9000。
现在,当我通过浏览器打开应用程序时,可以正确看到用户界面,但是在开发控制台中,我给出了错误消息:
Failed to load resource: net::ERR_CONNECTION_REFUSED
因此,我认为它无法与后端API通信。
在EC2上,当我在http://localhost:9000/home/
和http://localhost:8080/myserv/getdata
上进行卷曲时,两者都给出正确的响应,因此两个应用程序都在运行文件,那么前端为什么不能与后端通信?
我该如何解决?
答案 0 :(得分:0)
AngularJS在浏览器中运行。 AngularJS应用程序的“ localhost”版本将始终是本地便携式/台式计算机,而Spring Boot的“ localhost”版本是EC2服务器。因此,您要尝试执行的操作将无效。仅当您在本地计算机上运行所有内容时,才可以使用这样的“ localhost”。
Spring Boot应用程序必须被公开,以便可以从将使用该应用程序的每个人的便携式计算机/台式计算机访问它。如果这是公共应用程序,则意味着将其公开到整个Internet。
AngularJS应用程序将需要使用EC2服务器的Internet地址进行配置。