線上狀態碼引起 bug 後的一些總結

    公司最近出了個很嚴重的事故,不是bug,網關層返回給用戶一些502 錯誤,致使被客戶投訴。因而總結下。php

    該文章後續仍在不斷的更新修改中, 請移步到原文地址http://dmwan.ccnginx

    公司有個業務網關是openresty,後面負載均衡給一些php 進程,而後客戶請求增多後,網關報了502給客戶。這個事情,很嚴重。這裏主要分析兩個事情,一個是502 的緣由,一個是如何解決這個事情。這裏報502給客戶是絕對不能容許的!後端

    首先,502 的緣由。nginx 在upstream 狀況下,分兩種,一種是tcp 建聯成功,一種是http建聯成功。當tcp建聯失敗或者當下遊服務器繁忙,http 建聯失敗,這種狀況nginx 會直接返回狀態碼502給客戶端。狀況就是後端負載過高,扛不住。服務器

    而後,咱們須要的是解決502的問題,直接後端加機器唄?可是這裏要更深刻下,怎麼防止502狀態碼回傳客戶,或者說,這些失敗的請求可否從新執行,實際上是能夠的!負載均衡

    有幾種作法:tcp

    第一種,客戶限頻,超頻的請求,直接返回503。對客戶限頻是正常的作法。設置模塊ngx_http_limit_req_module,歷來源上限制。rest

    第二種,攔截error,重定向另一臺機器。注意報警,防止雪崩!這裏使用proxy_next_upstream 參數就能夠。能夠設置的參數:進程

    第三種,攔截error,重定向錯誤頁面,或者返回503,告知客戶已經超頻。get

相關文章
相關標籤/搜索