Amazon (AWS) 負載平衡器和 Apache 出現間歇性 HTTP 502 錯誤

Amazon (AWS) 負載平衡器和 Apache 出現間歇性 HTTP 502 錯誤

我在 AWS 中設定了一個負載平衡器,它將流量路由到 Apache Ubuntu 伺服器。

當我瀏覽我的 URL 時,有時一切都很順利。然後我點擊「刷新」按鈕,下載一些檔案時開始出現 502 錯誤。每次都是不同的文件。

然後我再次點擊“刷新”,一切正常。

目前我是唯一使用該伺服器的人。

我的負載平衡器設定如下:

  • 可用區域:us-east-1a 和 us-east-1b
  • 安全群組:開放80和443端口
  • 偵聽器:連接埠 80 重定向到連接埠 443,連接埠 443 轉送到我的目標

我的目標群組配置如下:

  • 目標類型:實例
  • 協定:HTTP:80
  • 負載平衡器:我的負載平衡器名稱
  • 註冊目標:我在每個區域中運行 1 個實例。

我的 Auto Scaling 群組配置如下:

  • 所需容量:2
  • 最小容量:2
  • 最大容量:5
  • 可用區域:us-east-1a、us-east-1b

我的 apache 伺服器配置了預設安裝值,加上:

  • 保持活動狀態
  • 超時120
  • 保持活動超時 120
  • 最大保持活動請求數 100
  • AcceptFilter http 無
  • AcceptFilter https 無

我不是伺服器人員,我是程式設計師,所以我真的不知道要檢查什麼。我認為配置負載平衡器很簡單...

感謝您的協助

編輯 2020-08-27 15h39

我在 VPC 和負載平衡器上啟用了日誌,並刷新了頁面。我在特定文件上遇到 502 錯誤。

在負載平衡器日誌中,我看到特定檔案的 502 個條目。這是條目 - JSON 格式 - 我在其中替換了所有敏感數據

[
  {
    "type": "h2",
    "time": "2020-08-27T19:20:52.547402Z",
    "elb": "app/web-server-load-balancer/**my-load-balancer-id**",
    "client:port": "*my-ip-address*:60831",
    "target:port": "10.0.0.106:80",
    "request_processing_time": 0,
    "target_processing_time": 0.013,
    "response_processing_time": -1,
    "elb_status_code": 502,
    "target_status_code": "-",
    "received_bytes": 45,
    "sent_bytes": 610,
    "request": "GET https://**my-url** HTTP/2.0",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
    "ssl_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
    "ssl_protocol": "TLSv1.2",
    "target_group_arn": "**my-target-group-arn**",
    "trace_id": "Root=1-5f480794-150df3bcad7fd0ac6bdfc41c",
    "domain_name": "**my-domain-name**",
    "chosen_cert_arn": "session-reused",
    "matched_rule_priority": 0,
    "request_creation_time": "2020-08-27T19:20:52.534000Z",
    "actions_executed": "forward",
    "redirect_url": "-",
    "error_reason": "-",
    "target:port_list": "10.0.0.106:80",
    "target_status_code_list": "-",
    "classification": "-",
    "classification_reason": "-"
  }
]

不知道這些數據能不能幫到你!

編輯 2020-08-31 (1)

我在防火牆中打開了兩個虛擬機器以直接存取它們。當我直接訪問每個伺服器時,我根本沒有收到 502 錯誤。當我透過負載平衡器存取時,我得到 502。

編輯 2020-08-31 (2)

我更改了負載平衡器,將 HTTP 流量路由到實例,而不是將其重定向到 443 連接埠。

在連接埠 80 上,我沒有收到 502 錯誤。我硬刷新了很多次,都沒有得到 502。我記得你當我直接用 https 存取虛擬機器時,我沒有得到 502。

答案1

我看到這個論壇帖子: AWS 開發者論壇

最後一篇文章其實給了我答案:

確保在 ALB/ELB 後面時沒有使用 Apache 的事件 MPM 模組(預設)。它動態關閉連線。嘗試工人 MPM。

我更改了 Apache 配置以使用 Worker MPM,就目前情況而言,我沒有遇到任何 502 錯誤。

答案2

我嘗試了工作 MPM 和事件 MPM,但它們都沒有完全消除隨機 502。這是在 Apache 上,位於 ALB 和 Tomcat 之間。

相關內容