【发布时间】:2021-11-25 09:09:33
【问题描述】:
我正在尝试使用两个容器(后端和前端)在 Elastic Beanstalk 中创建一个环境。
docker-compose.yml
version: '3.0'
services:
my_api:
image: "850977987151.dkr.ecr.sa-east-1.amazonaws.com/my-api:latest"
environment:
ASPNETCORE_ENVIRONMENT: Staging
ports:
- "9901:80"
volumes:
- "./Logs:/app/Data/Logs"
my_app:
image: "850977987151.dkr.ecr.sa-east-1.amazonaws.com/my-app:latest"
ports:
- "80:80"
发布工作正常,但我的前端(角度)应用程序无法使用端口 9901 上的 api。
错误:
localhost:9901/UserConfiguration/GetAll:1 加载资源失败: 网络::ERR_CONNECTION_REFUSED
如果我访问我的 EC2 实例并运行:
curl http://localhost:9901/UserConfiguration/GetAll
正常工作!
appsettings.json 上的 CorsOrigins 配置:
"ServerRootAddress": "http://localhost:9901",
"ClientRootAddress": "http://myappqa-env.eba-xasnmn7n.sa-east-1.elasticbeanstalk.com",
"CorsOrigins": "http://myappqa-env.eba-xasnmn7n.sa-east-1.elasticbeanstalk.com,http://localhost"
}
Angular appconfig.json:
"remoteServiceBaseUrl": "http://localhost:9901"
我做错了什么?
编辑
即使我在我的 API 中允许任何来源,如下面的代码,我仍然有同样的错误。
services.AddCors(
options => options.AddPolicy(
_defaultCorsPolicyName,
builder => builder
//.WithOrigins(
// // App:CorsOrigins in appsettings.json can contain more than one address separated by comma.
// _appConfiguration["App:CorsOrigins"]
// .Split(",", StringSplitOptions.RemoveEmptyEntries)
// .Select(o => o.RemovePostFix("/"))
// .ToArray()
//)
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
)
);
【问题讨论】:
-
[愚蠢的评论]我有一个用于测试的应用程序,它具有类似的架构(Angular UI + App Server)here。我有一个 compose file 可以很好地与 Beanstalk 配合使用。我不清楚的一件事是......是调用
localhost的角度/ JS代码吗?如果是这种情况,如果它在客户端运行,它如何工作(这可以解释为什么如果你 ssh 进入实例并针对 localhost 运行 curl 它可以工作)。 -
也许完全不相关,但为了完整起见,它在我的应用程序中的工作方式是客户端代码连接到
window.location.href(它表示下载客户端代码的 URL)。我的 nginx 服务于 JS 代码而不是代理 API 调用到 API 服务器。 See diagram -
@mreferre 你的评论一点也不愚蠢,就是这样。我还需要公开我的 API 并在前端使用该地址。如果你想把它作为答案,我会接受它!
-
哦,太好了。我把这些 cmets 变成了答案。很高兴它有帮助。
标签: .net amazon-web-services docker docker-compose amazon-elastic-beanstalk