通常我們會使用Nginx做反向代理和負(fù)載均衡,都是http協(xié)議,其實Nginx還可以轉(zhuǎn)發(fā)TCP,而且配置基本很相似(下面的原理也適用于http)。
原理圖如下:
正向代理:就是我們所說的代理,例如客戶向服務(wù)器A發(fā)請求,但是A不接受除了服務(wù)器B以外的請求,然后客戶委托服務(wù)器B向服務(wù)器A發(fā)請求,然后通過服務(wù)器B做中間人傳輸信息。這個過程是對服務(wù)器A是透明的,它只知道和服務(wù)器B通信。
反向代理:正向代理是客戶委托,那么反向代理就是服務(wù)器做委托。例如客戶向服務(wù)器A做請求,但是服務(wù)器A不知道怎么處理,那么A就委托服務(wù)器B處理,然后把結(jié)果返回給客戶,這個過程對客戶是透明的。
所有負(fù)載均衡就是利用了反向代理,把客戶的請求分發(fā)到不同的主機(jī)上處理,客戶并不需要知道處理的過程。
Nginx 提供輪詢(round robin)、IP 哈希(client IP)和加權(quán)輪詢 3 種方式,默認(rèn)情況下,Nginx 采用的是輪詢。
每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除。
指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題。
可以為每個 backserver 指定最大的重試次數(shù),和重試時間間隔,所使用的關(guān)鍵字是 max_fails 和 fail_timeout。
當(dāng)所有的非備機(jī)(non-backup)都宕機(jī)(down)或者繁忙(busy)的時候,就會使用由 backup 標(biāo)注的備機(jī)。必須要注意的是,backup 不能和 ip_hash 關(guān)鍵字一起使用。
在nginx.conf文件配置,是和http同級的
stream { upstream backend { #hash $remote_addr consistent; server 10.118.12.92:10001 weight=5; #server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; #server unix:/tmp/backend3; } server { listen 10001; proxy_connect_timeout 5s; proxy_timeout 3600s; proxy_pass backend; }}
注意如果放在http里面,那么這個配置就是負(fù)載均衡http了。
ref.
https://blog.52itstyle.com/archives/623/