nginx:是一款輕量級(jí)的WEB服務(wù)器 / 反向代理服務(wù)器,占有內(nèi)存小,并發(fā)力強(qiáng)叛薯。
作用:中間件 和 負(fù)載均衡
負(fù)載均衡幾種策略:
- 輪詢(round-robin默認(rèn)):每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,也是最簡(jiǎn)單的配置算法;如果后端服務(wù)器down掉矮慕,能自動(dòng)剔除。
upstream [testround.com](http://testround.com/)
{
server 192.168.1.1:8080 ;
server 192.168.1.2:8081 ;
server 192.168.1.3:8082 ;
}
- ip_hash:每個(gè)請(qǐng)求按訪問(wèn)IP的hash值結(jié)果進(jìn)行分配奉件,同一個(gè)IP客戶端固定訪問(wèn)一個(gè)后端服務(wù)器宵蛀。可以保證來(lái)自同一ip的請(qǐng)求被打到固定的機(jī)器上瓶蚂,可以解決session問(wèn)題糖埋。如果后端服務(wù)器down掉,要手工down掉窃这。
upstream [testiphash.com](http://testiphash.com/)
{
#后端服務(wù)器訪問(wèn)規(guī)則
ip_hash;
server 192.168.1.1:8080 ;
server 192.168.1.2:8081 ;
server 192.168.1.3:8082 ;
}
- 權(quán)重算法:
指定輪詢幾率瞳别,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況杭攻。weight的值越大分配到的訪問(wèn)概率越高祟敛,主要用于后端每臺(tái)服務(wù)器性能不均衡的情況下,或者僅僅為在主從(2臺(tái)服務(wù)器)的情況下設(shè)置不同的權(quán)值兆解,達(dá)到合理有效的地利用主機(jī)資源馆铁。
upstream [testweight.com](http://testweight.com/)
{
#后端服務(wù)器訪問(wèn)規(guī)則
server 192.168.1.1:8080 weight=2;
server 192.168.1.2:8081 weight=2;
}
- 最少連接(least_conn):把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器進(jìn)行處理。例如Nginx負(fù)載中配置了兩臺(tái)服務(wù)器锅睛,sky和fans埠巨,當(dāng)Nginx接收到一個(gè)請(qǐng)求時(shí)历谍,sky正在處理的請(qǐng)求數(shù)是100,fans正在處理的請(qǐng)求數(shù)是200辣垒,則Nginx會(huì)把當(dāng)前請(qǐng)求交給sky來(lái)處理望侈。
upstream [testleastconn.com](http://testleastconn.com/)
{
least_conn;
server 192.168.1.1:8080;
server 192.168.1.2:8081;
}
server {
listen 80;
server_name localhost;
location ^~ /round/ {
proxy_pass http://testround.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 8m;
client_body_buffer_size 128k;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_buffer_size 8k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location ^~ /iphash/ {
proxy_pass http://testiphash.com;
}
location ^~ /weight/ {
proxy_pass http://testweight.com;
}
location ^~ /leastconn/ {
proxy_pass http://testleastconn.com;
}
}