Nginx之優雅處理上游服務器錯誤碼

當上遊服務器無法響應請求時,便會返回50x狀態碼,這裏我們可以進行錯誤優化處理,會顯示的更加友好。

示例如下:

# 方法1:從本地磁盤提供錯誤頁面
server {
    error_page 500 502 503 504 /50x.html;
    location =/50x.html {
        root html;
}

# 方法2:從外部網站提供錯誤頁面
server {
    error_page 500 http://www.test.com/50x.html;
}

若這裏爲代理到一組上游服務器的話,也可以定義一個備用服務器,以便於其他服務器不再處理請求時暫時處理請求(適用於流量小的站點)。

upstream servers {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082 down;     # 下線
    server 127.0.0.1:8083 backup;   # 備份 
}
server {
    location / {
        error_page 500 502 503 504 =@fallback;
        proxy_pass http://servers;
    }
    location @fallback {
        proxy_pass http://127.0.0.1:8084;
    }
}

upstream模塊還能夠爲每一個上游服務器設置狀態值,這些狀態值的含義分別例如以下:

  • down 表示該server臨時不參與負載;
  • weight 默認值爲1,當weight越大,負載的權重就越大;
  • max_fails 表示同時請求失敗的次數爲1,當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
  • fail_timeout 表示max_fails次失敗後,暫停的時間;
  • backup 表示當其他全部的非backup機器down或者忙的時候,纔會去請求backup機器,所以這臺機器壓力會最輕。

擴展:Nginx也支持處理error_page 指定400或更大的錯誤代碼的處理,如下示例:

server {
    proxy_intercept_errors on;       # 開啓該指令
    error_page 400 403 404 /40x.html;

            location = /40x.html {
        root html;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章