簡體   English   中英

AWS 負載均衡器 502 錯誤網關

[英]AWS Load Balancer 502 Bad Gateway

我有用應用程序負載均衡器托管在 EC2 上的 node/express 編寫的微服務。

一些用戶甚至在請求到達服務器之前就收到了 502。

我在每個實例中注冊每個日志,我沒有這些請求的日志,我在 502 之前有請求,在 502 之后有請求,這就是為什么我假設請求永遠不會到達服務器的原因。 大多數用戶通過刷新頁面或使用匿名選項卡來解決這個問題,這會連接到不同的機器(我們有 6 個)。

我可以從負載均衡器日志中看出,負載均衡器幾乎立即以 502 響應請求。我猜這可能是 TCP RST。

很久以前也遇到過類似的問題,不得不在節點配置中加入keepAliveTimeoutheadersTimeout 這是我的設置(仍然使用 60 年代的 LB 默認值):

server.keepAliveTimeout = 65000;
server.headersTimeout = 80000;

所有實例的指標,尤其是 memory 和 CPU 使用率都很好。

這些 502 錯誤是在我們進行更新后開始的,我們在其中引入了幾個包,例如 axios。 一開始我以為可能是axios,因為默認沒有開啟keep-alive。 但它沒有用。 除了axios 之外,我們只使用請求

關於我應該如何調試/修復此問題的任何提示?

HTTP 502 錯誤通常是由負載平衡器的問題引起的。 這可以解釋為什么請求永遠不會到達您的服務器,大概是因為負載均衡器由於某種或其他原因無法到達服務器。

這個鏈接有一些關於如何從經典負載均衡器獲取日志的提示。 但是,由於您沒有指定,您可能正在使用應用程序負載均衡器,在這種情況下, 此鏈接可能更有用。

從 ALB 訪問日志中,我知道 ALB 無法連接目標,或者連接正在被目標立即終止。

最困難的部分是弄清楚如何復制 502 錯誤。

看起來我使用的節點版本的請求標頭大小限制為 8kb。 如果任何請求超過該限制,目標將拒絕連接,並且 ALB 將返回 502 錯誤。

解決方案:

我通過在節點啟動命令行中添加--max-http-header-size=size解決了這個問題,其中 size 是一個大於 8kb 的值。

AWS 負載均衡器 502 錯誤網關的幾個常見原因:

  1. 確保將您的公有子網(您的 ALB 的目標)設置為自動分配公有 IP(以便為部署的實例自動分配公有 IP)。
  2. 您的 alb 的安全組允許來自您連接的 IP 的 http 和/或 https 流量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM