我已经测试了这个设置,它在本地100%工作,但我无法让它在AWS上工作。
前端角
设置:
- 负载均衡器有公共DNS。
- 端口80和443上的监听器。443有SSL证书。
- 可用区均为3 us east (Public))
- 安全组允许来自我的LB安全组的HTTP/HTTPS流量,允许端口80/443的0.0.0.0/0流量。
- ECS集群有一个正在运行的服务和一个任务(FARGATE)主机端口80。
后台节点
设置:
- 负载均衡器有公共DNS。
- 端口80和443上的监听器。443有SSL证书。
- 可用区都是3 us east (Private))
- 安全组允许来自我的LB安全组的HTTP/HTTPS流量,允许端口80/443的0.0.0.0/0流量。
- ECS集群有一个正在运行的服务和一个任务(FARGATE)主机端口80。
两者在同一个VPC中。请注意,后端负载均衡器有一个健康检查,它会命中/API/healthcheck的API路由,并且它会工作。
当访问站点时,我有一个简单的测试设置,Angular将运行一个http请求来访问API backendloadbalancer.DNS.com/api/ig。我知道这个调用是由console.log触发的。角代码:
gettest(id): Observable<IG[]> {
console.log('IG HAS BEEN TOUCHED');
const url = hosturl + 'ig';
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
'Authorization': ls
}),
withCredentials: true,
params: {
'id': id,
}
};
return this._http.get(url, httpOptions)
.pipe(
map((res) => {
console.log(res);
return <IG[]> res;
})
);
}
后端有如下路由文件:
const express = require('express');
const router = new express.Router();
const ig = require('../controllers/ig.js');
router.get('/ig', console.log('API HIT!'), ig.get);
超时后失败。从来没有看到任何控制台日志API HIT。它似乎根本没有击中它。同样,这些都在本地工作。
是一个有效的处理程序:
router.get('/ig', (req, res, next) => {console.log('API HIT!'); next()}, ig.get);
在您的示例中,console.log
在服务器启动时调用,而不是在请求时调用。我相信它也不适用于本地主机,因为生成的urlconst url = hosturl + 'ig';
是错误的,或者,另一方面,它可能已经在aws上工作了,而您只是没有处理程序,这就是为什么它失败了