事件發生於2019年7月2日 台灣時間 晚上 9:52 (UTC+8) [Jul 2, 13:52 UTC],大量使用者反應網頁回傳502 Bad Gateway網頁錯誤訊息
Network Performance Issues
New incident: Investigating
Cloudflare is observing network performance issues. Customers may be experiencing 502 errors while accessing sites on Cloudflare.We are working to mitigate impact to Internet users in this region.
事件排除時間 2019年7月2日 台灣時間 晚上 10:15 (UTC+8) [Jul 2, 14:15 UTC]
Incident status: Monitoring
Cloudflare has implemented a fix for this issue and is currently monitoring the results.We will update the status once the issue is resolved.
事件完全排除時間 2019年7月2日 台灣時間 晚上 10:57 (UTC+8) [Jul 2, 14:57 UTC]
Incident resolved
Cloudflare has resolved the issue and services have resumed normal operation.
事件排除時間花費了27分鐘,事件完全排除時間總共花費了1小時又5分鐘排除問題,這段時間究竟發生了什麼事情,而造成這次網站大規模502錯誤呢?
CloudFlare 於2019年7月12日,發表針對此事件的報告書
原因是因為一個錯誤的正規表示式 (正則式、正規表達式),而造成專用提供 HTTP / HTTPS 流量的CPU使用率一直處於100%,導致伺服器無法處理使用者瀏覽時發送的 HTTP / HTTPS 請求。
CPU使用率一直處於100%是由單個WAF(Web應用程式防火牆) 規則引起的,此規則包含寫得不好的正規表示式,最終導致過多的回溯(backtracking)
此正規表示式如下
1 |
(?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|\-|\+)+[)]*;?((?:\s|-|~|!|{}|\|\||\+)*.*(?:.*=.*))) |
此正規表示式中的 .*(?:.*=.*) 此規則,造成了多次重複循環、不停的回溯,導致CPU可用率最終耗盡。
總結造成此次502 Bad Gateway原因如下
1. WAF網頁防火牆部門寫了一個含有BUG的正規表示式之防護規則
2. 測試時沒有嚴格的遵循測試流程
3. 測試防火牆規則的套件沒有辦法偵測此規則是否會造成過多的CPU消耗
4. 更新此WAF規則,使用全球同步更新,所以牽一髮動而全身,造成全球大規模錯誤
5. 發生故障時,程式回滾效率過低
6. 發現CDN節點有問題後,監控系統偵測進而提示警報的時間花費過久
7. SREs登入節點訪問權限剛好過期,重新登入系統又花費了一段時間
8. CloudFlare 官網和API也經過了此次錯誤的服務CDN節點,所以也受到了此次502錯誤影響
CloudFlare 所有節點即時狀態監控網頁: 點我立即前往
作者:月影星痕
轉載請註明本文網址:https://www.chkaja.com/cloudflare-outage-502-error-report/
版權所有 © KJ資訊站 | 本文章採用 BY-NC-SA 進行授權。
發佈留言