當(dāng)生產(chǎn)環(huán)境里有很大的流量產(chǎn)生時(shí),通常需要用負(fù)載均衡技術(shù)來(lái)做優(yōu)化,并確保容錯(cuò)配置。Nginx不光可以實(shí)現(xiàn)Web Server,還可以作為HTTP負(fù)載均衡來(lái)分發(fā)流量給后端的應(yīng)用程序服務(wù)器,以此來(lái)提高性能。Nginx的負(fù)載均衡功能依賴(lài)于ngx_http_upstream_module模塊,所支持的代理方式有proxy_pass,fastcgi_pass,memcached_pass。
Nginx常用負(fù)載均衡算法:
輪詢(xún)(默認(rèn)算法)——每個(gè)請(qǐng)求會(huì)依次分配給后端不同的應(yīng)用程序服務(wù)器,不理會(huì)后端服務(wù)器的實(shí)際壓力
加權(quán)輪詢(xún)——權(quán)重越大的服務(wù)器,被分配到的次數(shù)就會(huì)越多,通常用于后端服務(wù)器性能不一致的情況
IP HASH——當(dāng)同IP進(jìn)行重復(fù)訪(fǎng)問(wèn)時(shí)會(huì)被指定到上次訪(fǎng)問(wèn)到的服務(wù)器,可以解決動(dòng)態(tài)網(wǎng)站SESSION共享問(wèn)題
upstream模塊常用參數(shù)說(shuō)明:
server 192.168.0.100:80 | 負(fù)載均衡后端RealServer的IP或者域名,端口不寫(xiě)的話(huà)默認(rèn)為80。高并發(fā)場(chǎng)景用域名,再通過(guò)DNS進(jìn)行負(fù)載均衡 |
weight=5 | 權(quán)重,默認(rèn)為1,權(quán)重越大接收的請(qǐng)求越多 |
max_fails=2 | 最大嘗試的失敗次數(shù),默認(rèn)為1,0表示禁止失敗嘗試 |
fail_timeout=10s | 失敗超時(shí)時(shí)間,默認(rèn)是10秒,通常3s左右比較合適 |
backup | 熱備配置,前段RealServer出現(xiàn)問(wèn)題后會(huì)自動(dòng)上線(xiàn)backup服務(wù)器 |
down | 標(biāo)志服務(wù)器不可用,這個(gè)參數(shù)通常配合IP_HASH使用 |
Nginx負(fù)載均衡設(shè)置:
默認(rèn)的負(fù)載均衡配置
http { #upstream模塊包含在http模塊下
upstream linuxidc{ #定義upstream名字,下面會(huì)引用
server 192.168.1.100; #指定后端服務(wù)器地址
server 192.168.1.110; #指定后端服務(wù)器地址
server 192.168.1.120; #指定后端服務(wù)器地址
}
server {
listen 80;
server name www.linuxidc.com;
location / {
proxy_pass http://linuxidc; #引用upstream
}
}
}
在上面的例子中,當(dāng)用戶(hù)訪(fǎng)問(wèn)www.linuxidc.com站點(diǎn)時(shí),Nginx會(huì)負(fù)載平衡分配給后端的三個(gè)服務(wù)器。
加權(quán)負(fù)載均衡
http {
upstream linuxidc{
server 192.168.1.100 weight=3; #指定后端服務(wù)器地址,權(quán)重為3
server 192.168.1.110;
}
server {
listen 80;
server name www.linuxidc.com;
location / {
proxy_pass http://linuxidc;
}
}
}
在上面配置中,每3個(gè)請(qǐng)求分配給192.168.1.100,然后第4個(gè)請(qǐng)求會(huì)分配給192.168.1.110,如此循環(huán)下去。
IP HASH負(fù)載均衡
upstream linuxidc {
ip_hash; #采用IP HASH算法
server 192.168.1.100;
server 192.168.1.110;
server 192.168.1.120;
}
如果需要將客戶(hù)與后端一臺(tái)服務(wù)器“綁定”起來(lái),可以使用ip-hash負(fù)載平衡機(jī)制。這樣可以確保來(lái)自相同客戶(hù)機(jī)的請(qǐng)求總是指向相同的服務(wù)器除非該服務(wù)器不可用。
Nginx高可用的實(shí)現(xiàn),利用backup標(biāo)簽,可以實(shí)現(xiàn)高可用,當(dāng)主服務(wù)掛掉后,backup服務(wù)器會(huì)自動(dòng)接管服務(wù),當(dāng)主服務(wù)恢復(fù)后,backup也會(huì)自動(dòng)放棄服務(wù)
http {
upstream linuxidc{
server 192.168.1.100
server 192.168.1.110 backup;
}
server {
listen 80;
server name www.linuxidc.com;
location / {
proxy_pass http://linuxidc;
}
}
}
Nginx的upstream模塊相當(dāng)于是建立一個(gè)函數(shù)庫(kù)一樣,把后端的服務(wù)器地址放在了一個(gè)池子里,而proxy模塊則是從這個(gè)池子里調(diào)用了這些服務(wù)器。
http_proxy_module模塊常用參數(shù):
proxy_set_header:讓后端服務(wù)器能獲取到前端用戶(hù)真實(shí)IP,而不只是代理服務(wù)器的IP
proxy_set_header Host $host;
#當(dāng)后端服務(wù)器配置多個(gè)web站點(diǎn)時(shí),該選項(xiàng)可以讓服務(wù)器識(shí)別出具體要訪(fǎng)問(wèn)的是哪個(gè)站點(diǎn),而不會(huì)將第一個(gè)站點(diǎn)作為默認(rèn)站點(diǎn)傳遞給用戶(hù)
proxy_set_header X-Forwarded-For $remote_addr;
#如果后端服務(wù)器需要獲取用戶(hù)的真實(shí)IP,需要該選項(xiàng)
client_body_buffer_size:客戶(hù)端請(qǐng)求主體緩沖區(qū)大小
proxy_connect_timeout:代理服務(wù)器和后端真實(shí)服務(wù)器握手連接超時(shí)時(shí)間
proxy_send_timeout:后端服務(wù)器回傳數(shù)據(jù)給Nginx的時(shí)間,需要在設(shè)置的時(shí)間范圍內(nèi)發(fā)送完所有數(shù)據(jù),否則Nginx將斷開(kāi)連接
proxy_read_timeout:代理服務(wù)器和后端服務(wù)器連接成功后,等待后端服務(wù)器響應(yīng)時(shí)間
前端Nginx反向代理,如何獲取客戶(hù)端真實(shí)IP?
#轉(zhuǎn)發(fā)動(dòng)態(tài)頁(yè)面給Tomcat處理
location ~ \.(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
更多Nginx負(fù)載均衡配置相關(guān)教程見(jiàn)以下內(nèi)容:
Nginx負(fù)載均衡配置說(shuō)明 http://www.linuxidc.com/Linux/2016-03/129424.htm
Linux下Nginx+Tomcat負(fù)載均衡和動(dòng)靜分離配置要點(diǎn) http://www.linuxidc.com/Linux/2016-01/127255.htm
Docker+Nginx+Tomcat7配置簡(jiǎn)單的負(fù)載均衡 http://www.linuxidc.com/Linux/2015-12/125907.htm
Nginx負(fù)載均衡(主備)+Keepalived http://www.linuxidc.com/Linux/2015-12/126865.htm
使用Nginx作為負(fù)載均衡器 http://www.linuxidc.com/Linux/2015-12/125789.htm
CentOS環(huán)境下Nginx實(shí)現(xiàn)3臺(tái)虛擬機(jī)負(fù)載均衡 http://www.linuxidc.com/Linux/2015-12/125875.htm
Nginx反向代理負(fù)載均衡群集實(shí)戰(zhàn) http://www.linuxidc.com/Linux/2015-08/122111.htm
Nginx 的詳細(xì)介紹:請(qǐng)點(diǎn)這里
Nginx 的下載地址:請(qǐng)點(diǎn)這里
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2016-04/130350.htm
聯(lián)系客服