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
- 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 錯誤。