Amazon-Web-Services

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

  • October 13, 2020

我在 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
  • MaxKeepAliveRequests 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錯誤。我記得你當我用https直接訪問VM時,我沒有得到502。

我遇到了這個論壇文章: AWS Developer Forum

最後一個條目實際上給了我答案:

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

我將 Apache 配置更改為使用 worker MPM,就目前而言,我沒有遇到任何 502 錯誤。

引用自:https://serverfault.com/questions/1031647