nginx
nginx -s reopen
nginx -s stop
./nginx -s reload
nginx -t
/usr/local/nginx/conf/
/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/servers
nginx

./nginx -s quit
1.輪詢(xún)2.權重3.fair4.url_hash 5.ip_hash
每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
指定輪詢(xún)幾率,weight和訪(fǎng)問(wèn)比率成正比,用于后端服務(wù)器性能不均的
情況。
upstream backserver {
server 192.168.0.14 weight=3;
server 192.168.0.15 weight=7;
}
權重越高,在被訪(fǎng)問(wèn)的概率越大,如上例,分別是30%,70%。
上述方式存在一個(gè)問(wèn)題就是說(shuō),在負載均衡系統中,假如用戶(hù)在某臺服務(wù)器上登錄了,那么該用戶(hù)第二次請求的時(shí)候,因為我們是負載均衡系統,每次請求都會(huì )重新定位到服務(wù)器集群中的某一個(gè),那么*已經(jīng)登錄某一個(gè)服務(wù)器的用戶(hù)再重新定位到另一個(gè)服務(wù)器,其登錄信息將會(huì )丟失,這樣顯然是不妥的*。
我們可以采用**ip_hash*指令解決這個(gè)問(wèn)題,如果客戶(hù)已經(jīng)訪(fǎng)問(wèn)了某個(gè)服務(wù)器,當用戶(hù)再次訪(fǎng)問(wèn)時(shí),會(huì )將該請求通過(guò)哈希算法,自動(dòng)定位到該服務(wù)器*。
每個(gè)請求按訪(fǎng)問(wèn)ip的hash結果分配,這樣每個(gè)訪(fǎng)客固定訪(fǎng)問(wèn)一個(gè)后端服務(wù)器,可以解決*session的問(wèn)題*。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
按后端服務(wù)器的響應時(shí)間來(lái)分配請求,響應時(shí)間短的優(yōu)先分配。
upstream backserver {
server server1;
server server2;
fair;
}
按訪(fǎng)問(wèn)url的hash結果來(lái)分配請求,使每個(gè)url定向到同一個(gè)(對應的)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
在需要使用負載均衡的server中增加
proxy_pass http://backserver/;
upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示單前的server暫時(shí)不參與負載)
server 127.0.0.1:8080 weight=2; (weight 默認為1.weight越大,負載的權重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup機器down或者忙的時(shí)候,請求backup機器)
}
max_fails :允許請求失敗的次數默認為1.當超過(guò)最大次數時(shí),返回proxy_next_upstream 模塊定義的錯誤
fail_timeout:max_fails次失敗后,暫停的時(shí)間
配置實(shí)例:
#user nobody;
worker_processes 4;
events {
# 最大并發(fā)數
worker_connections 1024;
}
http{
# 待選服務(wù)器列表
upstream myproject{
# ip_hash指令,將同一用戶(hù)引入同一服務(wù)器。
ip_hash;
server 125.219.42.4 fail_timeout=60s;
server 172.31.2.183;
}
server{
# 監聽(tīng)端口
listen 80;
# 根目錄下
location / {
# 選擇哪個(gè)服務(wù)器列表
proxy_pass http://myproject;
}
}
}
性能在全局


網(wǎng)站訪(fǎng)問(wèn)量大,需要負載均衡。然而并不是所有網(wǎng)站都如此出色,有的網(wǎng)站,由于訪(fǎng)問(wèn)量太小,需要節省成本,將多個(gè)網(wǎng)站部署在同一臺服務(wù)器上。
例如將兩個(gè)網(wǎng)站部署在同一臺服務(wù)器上,兩個(gè)域名解析到同一個(gè)IP地址,但是用戶(hù)通過(guò)兩個(gè)域名卻可以打開(kāi)兩個(gè)完全不同的網(wǎng)站,互相不影響,就像訪(fǎng)問(wèn)兩個(gè)服務(wù)器一樣,所以叫兩個(gè)虛擬主機。
server {
listen 80 default_server;
server_name _;
return 444; # 過(guò)濾其他域名的請求,返回444狀態(tài)碼
}
server {
listen 80;
server_name www.aaa.com; # www.aaa.com域名
location / {
proxy_pass http://localhost:8080; # 對應端口號8080
}
}
server {
listen 80;
server_name www.bbb.com; # www.bbb.com域名
location / {
proxy_pass http://localhost:8081; # 對應端口號8081
}
}
在服務(wù)器8080和8081分別開(kāi)了一個(gè)應用,客戶(hù)端通過(guò)不同的域名訪(fǎng)問(wèn),根據server_name可以反向代理到對應的應用服務(wù)器。
虛擬主機的原理是通過(guò)HTTP請求頭中的Host是否匹配server_name來(lái)實(shí)現的,有興趣的同學(xué)可以研究一下HTTP協(xié)議。
另外,server_name配置還可以過(guò)濾有人惡意將某些域名指向你的主機服務(wù)器。
聯(lián)系客服