[英]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/
到快遞(不是/
)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-error。 在您添加了相應的指令來處理/cms
路徑后,應用程序就可以工作了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.