nginx負載均衡的5種策略(轉載)
nginx可以根據客戶端IP進行負載均衡,在upstream裏設置ip_hash,就可以針對同一個C類地址段中的客戶端選擇同一個後端服務器,除非那個後端服務器宕了纔會換一個。
nginx的upstream目前支持的5種方式的分配
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、指定權重
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、IP綁定 ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
在需要使用負載均衡的server中增加
proxy_pass http://backserver/;
upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示單前的server暫時不參與負載)
server 127.0.0.1:8080 weight=2; (weight 默認爲1.weight越大,負載的權重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup機器down或者忙的時候,請求backup機器)
}
max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
fail_timeout:max_fails次失敗後,暫停的時間
nginx可以根據客戶端IP進行負載均衡,在upstream裏設置ip_hash,就可以針對同一個C類地址段中的客戶端選擇同一個後端服務器,除非那個後端服務器宕了纔會換一個。
nginx的upstream目前支持的5種方式的分配
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、指定權重
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、IP綁定 ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
在需要使用負載均衡的server中增加
proxy_pass http://backserver/;
upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示單前的server暫時不參與負載)
server 127.0.0.1:8080 weight=2; (weight 默認爲1.weight越大,負載的權重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup機器down或者忙的時候,請求backup機器)
}
max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
fail_timeout:max_fails次失敗後,暫停的時間
Nginx 的 HttpUpstreamModule 提供對後端(backend)服務器的簡單負載均衡。一個最簡單的 upstream 寫法如下:
upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com; } server { location / { proxy_pass http://backend; } }
1、後端服務器
通過 upstream 可以設定後端服務器,指定的方式可以是 IP 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析爲多個地址,則這些地址都作爲 backend。下面舉例說明:
upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3; }
第一個 backend 是用域名指定的。第二個 backend 是用 IP 和端口號指定的。第三個 backend 是用 UNIX 套接字指定的。
2、負載均衡策略
Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權重 3 種方式。
默認情況下,Nginx 會爲你提供輪詢作爲負載均衡策略。但是這並不一定能夠讓你滿意。比如,某一時段內的一連串訪問都是由同一個用戶 Michael 發起的,那麼第一次 Michael 的請求可能是 backend2,而下一次是 backend3,然後是 backend1、backend2、backend3…… 在大多數應用場景中,這樣並不高效。當然,也正因如此,Nginx 爲你提供了一個按照 Michael、Jason、David 等等這些亂七八糟的用戶的 IP 來 hash 的方式,這樣每個 client 的訪問請求都會被甩給同一個後端服務器。具體的使用方式如下:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com; }
這種策略中,用於進行 hash 運算的 key,是 client 的 C 類 IP 地址(C 類 IP 地址就是範圍在 192.0.0.0 到 223.255.255.255 之間,前三段號碼錶示子網,第四段號碼爲本地主機的 IP 地址類別)。這樣的方式保證一個 client 每次請求都將到達同一個 backend。當然,如果所 hash 到的 backend 當前不可用,則請求會被轉移到其他 backend。
再介紹一個和 ip_hash 配合使用的關鍵字:down。當某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標示出來,並且這樣被標示的 server 就不會接受請求去處理。具體如下:
upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3; }
還可以使用指定權重(weight)的方式,如下:
upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4; }
默認情況下 weight 爲 1,對於上面的例子,第一個 server 的權重取默認值 1,第二個是 4,所以相當於第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此衝突的策略。
3、重試策略
可以爲每個 backend 指定最大的重試次數,和重試時間間隔。所使用的關鍵字是 max_fails 和 fail_timeout。如下所示:
upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s; }
在上例中,最大失敗次數爲 3,也就是最多進行 3 次嘗試,且超時時間爲 30秒。max_fails 的默認值爲 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:
upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; }
4、備機策略
從 Nginx 的 0.6.7 版本開始,可以使用“backup”關鍵字。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標註的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。舉例如下:
upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com; }
Nginx 的 HttpUpstreamModule 提供對後端(backend)服務器的簡單負載均衡。一個最簡單的 upstream 寫法如下:
upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com; } server { location / { proxy_pass http://backend; } }
1、後端服務器
通過 upstream 可以設定後端服務器,指定的方式可以是 IP 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析爲多個地址,則這些地址都作爲 backend。下面舉例說明:
upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3; }
第一個 backend 是用域名指定的。第二個 backend 是用 IP 和端口號指定的。第三個 backend 是用 UNIX 套接字指定的。
2、負載均衡策略
Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權重 3 種方式。
默認情況下,Nginx 會爲你提供輪詢作爲負載均衡策略。但是這並不一定能夠讓你滿意。比如,某一時段內的一連串訪問都是由同一個用戶 Michael 發起的,那麼第一次 Michael 的請求可能是 backend2,而下一次是 backend3,然後是 backend1、backend2、backend3…… 在大多數應用場景中,這樣並不高效。當然,也正因如此,Nginx 爲你提供了一個按照 Michael、Jason、David 等等這些亂七八糟的用戶的 IP 來 hash 的方式,這樣每個 client 的訪問請求都會被甩給同一個後端服務器。具體的使用方式如下:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com; }
這種策略中,用於進行 hash 運算的 key,是 client 的 C 類 IP 地址(C 類 IP 地址就是範圍在 192.0.0.0 到 223.255.255.255 之間,前三段號碼錶示子網,第四段號碼爲本地主機的 IP 地址類別)。這樣的方式保證一個 client 每次請求都將到達同一個 backend。當然,如果所 hash 到的 backend 當前不可用,則請求會被轉移到其他 backend。
再介紹一個和 ip_hash 配合使用的關鍵字:down。當某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標示出來,並且這樣被標示的 server 就不會接受請求去處理。具體如下:
upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3; }
還可以使用指定權重(weight)的方式,如下:
upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4; }
默認情況下 weight 爲 1,對於上面的例子,第一個 server 的權重取默認值 1,第二個是 4,所以相當於第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此衝突的策略。
3、重試策略
可以爲每個 backend 指定最大的重試次數,和重試時間間隔。所使用的關鍵字是 max_fails 和 fail_timeout。如下所示:
upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s; }
在上例中,最大失敗次數爲 3,也就是最多進行 3 次嘗試,且超時時間爲 30秒。max_fails 的默認值爲 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:
upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; }
4、備機策略
從 Nginx 的 0.6.7 版本開始,可以使用“backup”關鍵字。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標註的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。舉例如下:
upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com; }
Nginx 的 HttpUpstreamModule 提供對後端(backend)服務器的簡單負載均衡。一個最簡單的 upstream 寫法如下:
upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com; } server { location / { proxy_pass http://backend; } }
1、後端服務器
通過 upstream 可以設定後端服務器,指定的方式可以是 IP 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析爲多個地址,則這些地址都作爲 backend。下面舉例說明:
upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3; }
第一個 backend 是用域名指定的。第二個 backend 是用 IP 和端口號指定的。第三個 backend 是用 UNIX 套接字指定的。
2、負載均衡策略
Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權重 3 種方式。
默認情況下,Nginx 會爲你提供輪詢作爲負載均衡策略。但是這並不一定能夠讓你滿意。比如,某一時段內的一連串訪問都是由同一個用戶 Michael 發起的,那麼第一次 Michael 的請求可能是 backend2,而下一次是 backend3,然後是 backend1、backend2、backend3…… 在大多數應用場景中,這樣並不高效。當然,也正因如此,Nginx 爲你提供了一個按照 Michael、Jason、David 等等這些亂七八糟的用戶的 IP 來 hash 的方式,這樣每個 client 的訪問請求都會被甩給同一個後端服務器。具體的使用方式如下:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com; }
這種策略中,用於進行 hash 運算的 key,是 client 的 C 類 IP 地址(C 類 IP 地址就是範圍在 192.0.0.0 到 223.255.255.255 之間,前三段號碼錶示子網,第四段號碼爲本地主機的 IP 地址類別)。這樣的方式保證一個 client 每次請求都將到達同一個 backend。當然,如果所 hash 到的 backend 當前不可用,則請求會被轉移到其他 backend。
再介紹一個和 ip_hash 配合使用的關鍵字:down。當某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標示出來,並且這樣被標示的 server 就不會接受請求去處理。具體如下:
upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3; }
還可以使用指定權重(weight)的方式,如下:
upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4; }
默認情況下 weight 爲 1,對於上面的例子,第一個 server 的權重取默認值 1,第二個是 4,所以相當於第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此衝突的策略。
3、重試策略
可以爲每個 backend 指定最大的重試次數,和重試時間間隔。所使用的關鍵字是 max_fails 和 fail_timeout。如下所示:
upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s; }
在上例中,最大失敗次數爲 3,也就是最多進行 3 次嘗試,且超時時間爲 30秒。max_fails 的默認值爲 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:
upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; }
4、備機策略
從 Nginx 的 0.6.7 版本開始,可以使用“backup”關鍵字。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標註的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。舉例如下:
upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com; }
Nginx 的 HttpUpstreamModule 提供對後端(backend)服務器的簡單負載均衡。一個最簡單的 upstream 寫法如下:
upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com; } server { location / { proxy_pass http://backend; } }
1、後端服務器
通過 upstream 可以設定後端服務器,指定的方式可以是 IP 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析爲多個地址,則這些地址都作爲 backend。下面舉例說明:
upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3; }
第一個 backend 是用域名指定的。第二個 backend 是用 IP 和端口號指定的。第三個 backend 是用 UNIX 套接字指定的。
2、負載均衡策略
Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權重 3 種方式。
默認情況下,Nginx 會爲你提供輪詢作爲負載均衡策略。但是這並不一定能夠讓你滿意。比如,某一時段內的一連串訪問都是由同一個用戶 Michael 發起的,那麼第一次 Michael 的請求可能是 backend2,而下一次是 backend3,然後是 backend1、backend2、backend3…… 在大多數應用場景中,這樣並不高效。當然,也正因如此,Nginx 爲你提供了一個按照 Michael、Jason、David 等等這些亂七八糟的用戶的 IP 來 hash 的方式,這樣每個 client 的訪問請求都會被甩給同一個後端服務器。具體的使用方式如下:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com; }
這種策略中,用於進行 hash 運算的 key,是 client 的 C 類 IP 地址(C 類 IP 地址就是範圍在 192.0.0.0 到 223.255.255.255 之間,前三段號碼錶示子網,第四段號碼爲本地主機的 IP 地址類別)。這樣的方式保證一個 client 每次請求都將到達同一個 backend。當然,如果所 hash 到的 backend 當前不可用,則請求會被轉移到其他 backend。
再介紹一個和 ip_hash 配合使用的關鍵字:down。當某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標示出來,並且這樣被標示的 server 就不會接受請求去處理。具體如下:
upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3; }
還可以使用指定權重(weight)的方式,如下:
upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4; }
默認情況下 weight 爲 1,對於上面的例子,第一個 server 的權重取默認值 1,第二個是 4,所以相當於第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此衝突的策略。
3、重試策略
可以爲每個 backend 指定最大的重試次數,和重試時間間隔。所使用的關鍵字是 max_fails 和 fail_timeout。如下所示:
upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s; }
在上例中,最大失敗次數爲 3,也就是最多進行 3 次嘗試,且超時時間爲 30秒。max_fails 的默認值爲 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:
upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; }
4、備機策略
從 Nginx 的 0.6.7 版本開始,可以使用“backup”關鍵字。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標註的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。舉例如下:
upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com; }
Nginx 的 HttpUpstreamModule 提供對後端(backend)服務器的簡單負載均衡。一個最簡單的 upstream 寫法如下:
upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com; } server { location / { proxy_pass http://backend; } }
1、後端服務器
通過 upstream 可以設定後端服務器,指定的方式可以是 IP 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析爲多個地址,則這些地址都作爲 backend。下面舉例說明:
upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3; }
第一個 backend 是用域名指定的。第二個 backend 是用 IP 和端口號指定的。第三個 backend 是用 UNIX 套接字指定的。
2、負載均衡策略
Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權重 3 種方式。
默認情況下,Nginx 會爲你提供輪詢作爲負載均衡策略。但是這並不一定能夠讓你滿意。比如,某一時段內的一連串訪問都是由同一個用戶 Michael 發起的,那麼第一次 Michael 的請求可能是 backend2,而下一次是 backend3,然後是 backend1、backend2、backend3…… 在大多數應用場景中,這樣並不高效。當然,也正因如此,Nginx 爲你提供了一個按照 Michael、Jason、David 等等這些亂七八糟的用戶的 IP 來 hash 的方式,這樣每個 client 的訪問請求都會被甩給同一個後端服務器。具體的使用方式如下:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com; }
這種策略中,用於進行 hash 運算的 key,是 client 的 C 類 IP 地址(C 類 IP 地址就是範圍在 192.0.0.0 到 223.255.255.255 之間,前三段號碼錶示子網,第四段號碼爲本地主機的 IP 地址類別)。這樣的方式保證一個 client 每次請求都將到達同一個 backend。當然,如果所 hash 到的 backend 當前不可用,則請求會被轉移到其他 backend。
再介紹一個和 ip_hash 配合使用的關鍵字:down。當某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標示出來,並且這樣被標示的 server 就不會接受請求去處理。具體如下:
upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3; }
還可以使用指定權重(weight)的方式,如下:
upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4; }
默認情況下 weight 爲 1,對於上面的例子,第一個 server 的權重取默認值 1,第二個是 4,所以相當於第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此衝突的策略。
3、重試策略
可以爲每個 backend 指定最大的重試次數,和重試時間間隔。所使用的關鍵字是 max_fails 和 fail_timeout。如下所示:
upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s; }
在上例中,最大失敗次數爲 3,也就是最多進行 3 次嘗試,且超時時間爲 30秒。max_fails 的默認值爲 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:
upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; }
4、備機策略
從 Nginx 的 0.6.7 版本開始,可以使用“backup”關鍵字。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標註的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。舉例如下:
upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com; }