当我更改路径时,基于 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 路径应用程序开始工作后