Nginx除了可以直接作為web服務器使用外,更多的情況是通過反向代理將請求轉發給上游服務器。Nginx模塊一般被分成三大類:handler、filter和upstream。利用handler和filter,可以使nginx輕松完成任何單機工作。而upstream,將使nginx將跨越單機的限制,完成網絡數據的接收、處理和轉發。通過upstream可以實現服務的負載均衡規則,可以提高上游服務器的高可用性。
- 基本語法
upstream的基本語法如下,一個upstream需要設置一個名稱,這個名稱可以在server里面當作proxy主機使用:
upstream default {
server php-fpm-tfphp:9000;
}
一個upstream可以設置多個server,通常情況下Nginx會輪詢每一個server,從而達到最基本的負載循環效果。
upstream default {
server tflinux_php-fpm-tfphp_1:9000;
server tflinux_php-fpm-tfphp_2:9000;
}
- max_fails
max_fails是最多出錯數量,可以為每一個server設置一個max_fails,如果請求server發生了錯誤則max_fails會加一,如果請求server錯誤次數達到了max_fails后,Nginx會標記這個server為故障狀態,后面就不會再去請求它了。
默認情況下,max_fails的次數是1次。
upstream default {
server tflinux_php-fpm-tfphp_1:9000 max_fails=5;
server tflinux_php-fpm-tfphp_2:9000 max_fails=3;
}
- fail_timeout
fail_timeout是故障等待超時時間,前面說過了max_fails是請求server錯誤次數,如果達到了max_fails次數之后server會被標記為故障狀態,那么多長時間會重新嘗試呢?這個fail_timeout就是這個時間了,在達到max_fails次數之后server進入故障狀態,而后在fail_timeout時間之后會被重新標記為正常狀態。
默認情況下,fail_timeout的時間是10秒。
upstream default {
server tflinux_php-fpm-tfphp_1:9000 max_fails=5 fail_timeout=100;
server tflinux_php-fpm-tfphp_2:9000 max_fails=3 fail_timeout=60;
}
- proxy_connect_timeout
proxy_connect_timeout是連接超時時間,如果連接不到就會報錯
proxy_connect_timeout 3s;
- proxy_next_upstream_timeout
proxy_next_upstream_timeout是一個upstream反向代理的故障等待時間,簡單說就是無論upstream內部如何進行重試,所有花費的時間加在一起達到了proxy_next_upstream_timeout時間的話,就會直接報錯,不會再繼續嘗試了。
proxy_next_upstream_timeout 60s;
- backup
backup為備用服務器參數,可以為一個upstream設置一個backup的server,在生產server全部都出問題之后,可以自動切換到備用server上,為恢復服務爭取時間。
backup的server不同于其他server,平時是不承載請求的,所以它應該是比較空閑的狀態,主要做應急處理使用