我有一個在 EC2 執行個體上的 AWS 中運行的 IIS 網站,在 http://localhost:8088 上運行。它位於 ELB 後面,將所有 HTTPS 流量傳送到執行 EC2 執行個體的目標群組,因此任何對 http://my-dns-name 的請求都會被 ELB 重新路由到 https://my-dns-name ,然後轉向目標群體。我在目標群組上定義了運行狀況檢查,檢查/healthcheck
端點是否有 200 OK 回應,並且端點配置為允許未經身份驗證的請求(也稱為匿名)。
應用程式本身運作良好;但是,AWS 將目標群組報告為不健康,因為它從健康檢查端點接收到回應代碼 302。如果我直接從桌面(例如透過 PowerShell)親自查詢端點,Invoke-WebRequest
那麼我會得到預期的200 OK
回應。如果我遠端進入 EC2 執行個體並執行相同的查詢,那麼它也會傳回預期的200 OK
回應。
$> Invoke-WebRequest -Uri https://my-dns-name/healthcheck -Method GET
StatusCode : 200
StatusDescription : OK
Content : {}
RawContent : HTTP/1.1 200 OK
但如果我將其更改為使用 的本地地址http://localhost:8088
,則查詢失敗:
$> Invoke-WebRequest -Uri http://localhost:8088/healthcheck -Method GET
Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:1
+ Invoke-WebRequest -Uri http://localhost:8088/healthcheck -Method GET
任何想法為什麼目標群組得到 302 重定向,但如果我直接查詢然後我得到 200 OK(除非我使用本地地址)?
答案1
抱歉,這是應用程式的編碼問題;有一個RequireHttps
過濾器深埋在應用程式啟動程式碼中,這顯然是在嘗試在背景進行重定向; AWS 正在使用 HTTP 檢查網站,因此遇到了 302 重定向,但是當我在外部檢查時,我正在透過 HTTPS,這不會觸發重定向。
答案2
這裡需要檢查一些事項:
- Windows 防火牆是否正在運作並封鎖連接埠 8088?
- IIS 真的在監聽 8088 嗎?
- 您的 AWS TG 是否設定為在 8088 上執行運行狀況檢查?