【问题标题】:AWS ALB target group path based routing not working when I change the path当我更改路径时,基于 AWS ALB 目标组路径的路由不起作用
【发布时间】:2021-05-13 08:17:50
【问题描述】:

编辑

我发现在/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}`)
})

【问题讨论】:

    标签: amazon-web-services amazon-ecs aws-application-load-balancer


    【解决方案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 之前更改负载均衡器,您应该使用 "Redirect to" 操作

    注意您可以在重定向规则中使用 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-error。 在你添加了一个相应的指令来处理 /cms 路径后,App 就可以工作了

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 2021-10-30
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2017-07-30
      • 1970-01-01
      • 2016-05-27
      相关资源
      最近更新 更多