编辑
我发现在 /cms
下向节点应用程序添加路由似乎可以解决该问题,但是,我如何将 /
指向默认值。这似乎是令人讨厌的行为
结束编辑
我有一个运行一个任务的 ECS 集群,这是由一个目标组选择的,在 ALB 上我在 /
上路由到这个目标组,如下所示:
然后当我从 ALB 获取 DNS 并点击它工作正常的 url 时,我得到:
{"name":"DEMO"}
我也希望仅在用户点击 /cms
时才路由此服务,因此我在侦听器中进行了更改,如下所示:
但是一旦更新,我点击了 url + /cms
我得到:
Cannot GET /cms
我不知道为什么。这是一个超级基础的节点快递应用,索引如下:
const express = require('express')
const app = express()
const port = 80
app.get('/', (req, res) => {
let data = {
name: "DEMO"
}
res.json(data);
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
答案 0 :(得分:1)
HTTP 请求是:
http://yourdomen/[path]/[subpath]
其中:
[path]
- 无论是 /cms
还是 /
存在负载均衡器转发行为:
http://yourdomen/
,它会将 http://yourdomen/
传递给 Express(不是 /
)http://yourdomen/cms
,它还会将“http://yourdomen/cms”传递给 Express 而不做任何更改(不是 /cms
)http://yourdomen/cms/[subpath]
,则通过 http://yourdomen/cms/[subpath]
(不 /cms/[subpath]
)负载均衡器不能在 “转发到” 操作中仅将 subpath
部分传递给 Express。如果您想在将请求传递给 Express 之前让负载均衡器更改您的请求,您应该使用 “重定向到” 操作
注意您可以在重定向规则中使用 ECS 集群私有 DNS 作为主机,这样您就不需要目标组
重定向示例:
负载均衡器获取 http://yourdomen/cms/[subpath]
并将请求的路由更改为 http://dummycmsdomen/[subpath]
并将此更新的路由重定向到 Express。在这种情况下,Express 将获得 http://yourdomen/[path]
模式,并在您的场景中正常工作
版本部分答案:
http://yourdomen/
,那么 Express 应该使用 /
路径http://yourdomen/cms
,那么 Express 应该使用 /cms
路径因此,在您编辑代码 Express 应用程序之前,它正在等待 /
路径,但它获得 /cms
并且应该返回 GET 错误。
在您添加了相应的指令来处理 /cms
路径后,应用程序开始工作