標(biāo)簽:
Nginx可以作為負(fù)載均衡服務(wù)器,定義一組服務(wù)器,nginx的反向代理多臺(tái)服務(wù)器時(shí)其實(shí)就是利用負(fù)載均衡模塊實(shí)現(xiàn)的。負(fù)載均衡模塊是ngx_http_upstream_module,通過(guò)此模塊定義多臺(tái)后端服務(wù)器,這些服務(wù)器通過(guò)指令proxy_pass、fastcgi_pass和memcached_pass引用。
配置例子
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix: /tmp/backend3 ;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location/ {
proxy_pass http: //backend ;
}
}
ngx_http_upstream_module模塊常用的指令:
upstream name { …}
通過(guò)此命令定義一組服務(wù)器,這組服務(wù)器有一個(gè)名字是name,各個(gè)服務(wù)器可以監(jiān)聽(tīng)不同的端口。監(jiān)聽(tīng)在TCP和UNIX域套接字的服務(wù)器可以混用。
例子:
upstreambackend {
serverbackend1.example.com weight=5;
server127.0.0.1:8080 max_fails=3 fail_timeout=30s;
serverunix: /tmp/backend3 ;
}
默認(rèn)情況下,nignx按加權(quán)輪巡的方式將請(qǐng)求分發(fā)到各服務(wù)器。當(dāng)此負(fù)載均衡nginx和后端服務(wù)器通信時(shí),如果出現(xiàn)錯(cuò)誤,請(qǐng)求會(huì)被傳給下一臺(tái)服務(wù)器,直到所有可用的服務(wù)器都被嘗試過(guò),如果所有服務(wù)器都返回失敗,客戶端將會(huì)得到最后通信的那臺(tái)服務(wù)器的失敗相應(yīng)結(jié)果。
Server address [parameters];
此命令用于指定被負(fù)載的后端服務(wù)器,每個(gè)server指定一臺(tái)服務(wù)器,可以指定指定多臺(tái)服務(wù)器,服務(wù)器地址可以是域名或IP地址,端口是可選的。
常用參數(shù):
weight=number
設(shè)定服務(wù)器權(quán)限,默認(rèn)是1。
max_fails=number
設(shè)定nginx與后端服務(wù)器通信的嘗試失敗次數(shù)。在fail_timeout參數(shù)定義的時(shí)間段內(nèi),如果失敗次數(shù)達(dá)到此值,nginx就認(rèn)為此服務(wù)器不可用,在下一個(gè)max_timeout時(shí)間段內(nèi),服務(wù)器不會(huì)在被嘗試。失敗的默認(rèn)嘗試次數(shù)為1,0表示停止嘗試次數(shù),認(rèn)為服務(wù)器一直可用。
fail_timeout=time
設(shè)定在此時(shí)間段內(nèi),服務(wù)器失敗次數(shù)達(dá)到指定的嘗試次數(shù),服務(wù)器就被認(rèn)為在此時(shí)間段內(nèi)不可用。
backup
標(biāo)記為備用服務(wù)器,當(dāng)主服務(wù)器不可以用后,請(qǐng)求會(huì)轉(zhuǎn)給backup服務(wù)器。
down
標(biāo)記服務(wù)器永久不可用。如果某一服務(wù)器宕機(jī)時(shí),應(yīng)加上down參數(shù)。
ip_hash
在upstream中使用此參數(shù)。指定多臺(tái)服務(wù)器負(fù)載均衡算法,確保從同一客戶端過(guò)來(lái)的請(qǐng)求會(huì)被傳給同一臺(tái)服務(wù)器。當(dāng)此服務(wù)器宕機(jī)后,同一客戶端請(qǐng)求會(huì)傳給其他可用的同一服務(wù)器。
Keepalive connections;
Connections參數(shù)設(shè)置每個(gè)worker進(jìn)程和后端服務(wù)器保持連接的最大數(shù),這些保持的連接被放入緩存中。如果連接數(shù)大于此值,最久未使用的連接會(huì)被關(guān)閉。Keepalive不會(huì)限制nginx與上游服務(wù)器如memcached服務(wù)器的連接總數(shù),新的連接總會(huì)被創(chuàng)建。
配置memcached作為上游服務(wù)器連接keepalive的例子:
Upstreammemcached_backend {
Server127. 0.0 . 1 : 11211 ;
Server10. 0.0 . 2 : 11211 ;
Keepalive32;
}
Server{
…
Location/memcached/ {
Set$memcached_key $uri;
Memcached_passmemcached_backend;
}
}
配置fastcgi的服務(wù)器,設(shè)置fastcig_keep_conn指令來(lái)連接keepalive工作:
upstreamfastcgi_backend {
server127.0.0.1:9000;
keepalive8;
}
server{
…
location /fastcgi/ {
fastcgi_passfastcgi_backend;
fastcgi_keep_connon;
…
}
}
|