當上遊服務器無法響應請求時,便會返回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;
}
}