当我更改路径时,基于 AWS ALB 目标组路径的路由不起作用
AWS ALB target group path based routing not working when I change the path
编辑
我发现在 /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}`)
})
HTTP 请求是:
http://yourdomen/[path]/[subpath]
其中:
[path]
- /cms
或 /
存在负载均衡器转发行为:
- 如果负载均衡器得到
http://yourdomen/
,它将 http://yourdomen/
传递给 Express (not /
)
- 如果 Load Balancer 得到
http://yourdomen/cms
,它还会将“http://yourdomen/cms”传递给 Express,而不做任何更改(不是 /cms
)
- 如果负载均衡器得到
http://yourdomen/cms/[subpath]
,它会传递 http://yourdomen/cms/[subpath]
(不是 /cms/[subpath]
)
负载均衡器无法仅将 subpath
部分传递给 “转发到” 操作中的 Express。如果你想负载均衡器在将请求传递给 Express 之前更改你的请求,你应该使用 "Redirect to" action
注意您可以在重定向规则中使用 ECS 集群专用 DNS 作为主机,这样您就不需要目标组
重定向 示例:
负载均衡器获取 http://yourdomen/cms/[subpath]
并将请求的路由更改为 http://dummycmsdomen/[subpath]
并将此更新后的路由重定向到 Express。在这种情况下,Express 将获得 http://yourdomen/[path]
模式,并在您的场景中正常工作
版本部分答案:
- 如果你发送
http://yourdomen/
那么 Express 应该使用 /
路径
- 如果你发送
http://yourdomen/cms
那么 Express 应该使用 /cms
路径
因此,在您编辑代码 Express 应用程序之前,它正在等待 /
路径,但它得到 /cms
并且应该 return GET 错误。
在你添加了一个相应的指令来处理 /cms
路径应用程序开始工作后
编辑
我发现在 /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}`)
})
HTTP 请求是:
http://yourdomen/[path]/[subpath]
其中:
[path]
- /cms
或 /
存在负载均衡器转发行为:
- 如果负载均衡器得到
http://yourdomen/
,它将http://yourdomen/
传递给 Express (not/
) - 如果 Load Balancer 得到
http://yourdomen/cms
,它还会将“http://yourdomen/cms”传递给 Express,而不做任何更改(不是/cms
) - 如果负载均衡器得到
http://yourdomen/cms/[subpath]
,它会传递http://yourdomen/cms/[subpath]
(不是/cms/[subpath]
)
负载均衡器无法仅将 subpath
部分传递给 “转发到” 操作中的 Express。如果你想负载均衡器在将请求传递给 Express 之前更改你的请求,你应该使用 "Redirect to" action
注意您可以在重定向规则中使用 ECS 集群专用 DNS 作为主机,这样您就不需要目标组
重定向 示例:
负载均衡器获取 http://yourdomen/cms/[subpath]
并将请求的路由更改为 http://dummycmsdomen/[subpath]
并将此更新后的路由重定向到 Express。在这种情况下,Express 将获得 http://yourdomen/[path]
模式,并在您的场景中正常工作
版本部分答案:
- 如果你发送
http://yourdomen/
那么 Express 应该使用/
路径 - 如果你发送
http://yourdomen/cms
那么 Express 应该使用/cms
路径
因此,在您编辑代码 Express 应用程序之前,它正在等待 /
路径,但它得到 /cms
并且应该 return GET 错误。
在你添加了一个相应的指令来处理 /cms
路径应用程序开始工作后