nginx反向代理服務(wù)器+負(fù)載均衡
用nginx做反向代理和負(fù)載均衡非常簡(jiǎn)單,
支持兩個(gè)用法 1個(gè)proxy, 1個(gè)upstream,分別用來(lái)做反向代理,和負(fù)載均衡
以反向代理為例, nginx不自己處理php的相關(guān)請(qǐng)求,而是把php的相關(guān)請(qǐng)求轉(zhuǎn)發(fā)給apache來(lái)處理.
proxy反向代理
server {
listen80;#監(jiān)聽(tīng)端口
server_name localohst;#監(jiān)聽(tīng)域名
location /? {
root /var/www/a.com;#根目錄定位
index index.php;
}
location ~ \.php {
#將客戶IP地址傳遞給代理服務(wù)器
proxy_set_header X-Forwarded-For$remote_addr;
proxy_pass http://127.0.0.1:8080;
#如果是PHP 則轉(zhuǎn)發(fā)給apache來(lái)處理
}
}
upstream負(fù)載均衡
http{
#1. 在http節(jié)點(diǎn)下,添加upstream節(jié)點(diǎn)客峭。
upstream imgserver{
server192.168.1.200weight=1max_fails=2fail_timeout=3;
server192.168.1.201weight=1max_fails=2fail_timeout=3;
}
server{
listen80;#監(jiān)聽(tīng)端口
server_name localohst;#監(jiān)聽(tīng)域名
location /? {
root /var/www/a.com;
#根目錄定位
indexindex.php;
}
location ~ \.php {
proxy_pass http://127.0.0.1:8080;
#如果是PHP 則轉(zhuǎn)發(fā)給apache來(lái)處理 即反向代理
}
location ~* \.(jpg|jpeg|gif|png) {
#將客戶IP地址傳遞給代理服務(wù)器proxy_set_header X-Forwarded-For $remote_addr;
#2.將server節(jié)點(diǎn)下的location節(jié)點(diǎn)中的proxy_pass配置為:http:// + upstream名稱夜涕,即“http://imgserver”.proxy_pass http://imgserver;#如果是PHP 則轉(zhuǎn)發(fā)給apache來(lái)處理
}
}
}
3.
現(xiàn)在負(fù)載均衡初步完成了朗兵。upstream按照輪詢(默認(rèn))方式進(jìn)行負(fù)載痊剖,每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器衍腥,如果后端服務(wù)器down掉蚪缀,能自動(dòng)剔除疹启。雖然這種方式簡(jiǎn)便林说、成本低廉煎殷。但缺點(diǎn)是:可靠性低和負(fù)載分配不均衡。適用于圖片服務(wù)器集群和純靜態(tài)頁(yè)面服務(wù)器集群腿箩。
除此之外豪直,upstream還有其它的分配策略,分別如下:
weight(權(quán)重)
指定輪詢幾率度秘,weight和訪問(wèn)比率成正比顶伞,用于后端服務(wù)器性能不均的情況。如下所示剑梳,10.0.0.88的訪問(wèn)比率要比10.0.0.77的訪問(wèn)比率高一倍唆貌。
upstream linuxidc{
server10.0.0.77weight=5;
server10.0.0.88weight=10;
}
max_fails(允許請(qǐng)求失敗次數(shù))
允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤.
upstream linuxidc{server10.0.0.77max_fails=2;server10.0.0.88max_fails=3;}
fail_timeout(失敗后垢乙,暫停的時(shí)間)
max_fails次失敗后锨咙,暫停的時(shí)間。
upstream linuxidc{
server10.0.0.77max_fails=2fail_timeout=1;
server10.0.0.88max_fails=3fail_timeout=3;}
down(不參與負(fù)載)
表示當(dāng)前的server暫時(shí)不參與負(fù)載.
upstream linuxidc{
server 10.0.0.77 down;
}
backup(備用服務(wù)器)
其它所有的非backup機(jī)器down或者忙的時(shí)候追逮,請(qǐng)求backup機(jī)器酪刀。所以這臺(tái)機(jī)器壓力會(huì)最輕。
upstream linuxidc{
server10.0.0.77down;
server10.0.0.88backup;
}
ip_hash(訪問(wèn)ip)
每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配钮孵,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器骂倘,可以解決session的問(wèn)題。
upstream favresin{? ? ?
ip_hash;
server10.0.0.10:8080;
server10.0.0.11:8080;
}
fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求巴席,響應(yīng)時(shí)間短的優(yōu)先分配历涝。與weight分配策略類(lèi)似。
upstream favresin{
server10.0.0.10:8080;
server10.0.0.11:8080;? ? ?
fair;
}
url_hash(第三方)
按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求漾唉,使每個(gè)url定向到同一個(gè)后端服務(wù)器荧库,后端服務(wù)器為緩存時(shí)比較有效。
注意:在upstream中加入hash語(yǔ)句赵刑,server語(yǔ)句中不能寫(xiě)入weight等其他的參數(shù)分衫,hash_method是使用的hash算法。
upstream resinserver{? ? ?
server10.0.0.10:7777;? ??
server10.0.0.11:8888;
hash$request_uri;
hash_method crc32;
}
upstream還可以為每個(gè)設(shè)備設(shè)置狀態(tài)值般此,這些狀態(tài)值的含義分別如下:
down 表示當(dāng)前的server暫時(shí)不參與負(fù)載.
weight 默認(rèn)為1.weight越大蚪战,負(fù)載的權(quán)重就越大牵现。
max_fails :允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤.
fail_timeout : max_fails次失敗后邀桑,暫停的時(shí)間施籍。
backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,請(qǐng)求backup機(jī)器概漱。所以這臺(tái)機(jī)器壓力會(huì)最輕。
upstream bakend{
#定義負(fù)載均衡設(shè)備的Ip及設(shè)備狀態(tài)ip_hash;
server10.0.0.11:9090down;
server10.0.0.11:8080weight=2;
server10.0.0.11:6060;
server10.0.0.11:7070backup;
}