1)ip_hash
其中請求在基于客戶端IP地址的服務器之間分配,該方法確保來自同一客戶端的請求總是被傳遞到同一個服務器,除非該服務器不可用
案例:
upstream StaticServer {
ip_hash;
server 10.100.100.106:8082 weight=2;
server 10.100.100.107:8082 weight=1;
}
2)Nginx學習之負載均衡fair模塊
功能:按后端服務器的響應時間來分配請求,響應時間短的優先分配
下載模塊:
[root@proxy01 src]# git clone https://github.com/gnosek/nginx-upstream-fair.git
[root@proxy01 nginx-1.9.2]# pwd
/opt/nginx-1.9.2
[root@proxy01 nginx-1.9.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --error-log-path=/var/log/nginx/error_log --http-log-path=/var/log/nginx/access_log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --add-module=/opt/ngx_cache_purge-master --add-module=/usr/local/src/nginx-upstream-fair && make
[root@proxy01 nginx-1.9.2]# cp objs/nginx /usr/local/nginx/sbin/nginx
案例
upstream StaticServer {
#ip_hash;
server 10.100.100.105:8082 weight=2 max_fails=2 fail_timeout=2;
server 10.100.100.107:8082 weight=1 max_fails=2 fail_timeout=2;
server 10.100.100.106 backup;
fair;
}
3) url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
hash key [consistent];
Context: upstream
(在1.7.2版本以上可以使用)
案例1:
根據url來調度
upstream StaticServer {
#ip_hash;
hash $request_uri;
server 10.100.100.105:8082 weight=2 max_fails=2 fail_timeout=2;
server 10.100.100.107:8082 weight=1 max_fails=2 fail_timeout=2;
#server 10.100.100.106 backup;
#fair;
}
案例2:
當用戶訪問 http://test.51yuki.cn/6657/5347/index.html
我們通過哈希url中6657,固定訪問到一個server
if ( $uri ~* "^\/([^\/]+)\/.*" ) {
set $defurlkey $1
}
upstream www {
hash $defurlkey;
server 10.100.100.105:8082 weight=2 max_fails=2 fail_timeout=2;
server 10.100.100.107:8082 weight=1 max_fails=2 fail_timeout=2;
}
4)加權輪詢
weight參數
5)基于cookie的調度
語法:
Syntax: sticky cookie name [expires=time] [domain=domain] [httponly] [secure] [path=path];
sticky route $variable ...;
sticky learn create=$variable lookup=$variable zone=name:size [timeout=time] [header];
Default: —
Context: upstream
安裝nginx_sticky_module模塊
[root@proxy01 opt]# git clone https://github.com/bymaximus/nginx-sticky-module-ng.git
[root@proxy01 nginx-1.9.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --error-log-path=/var/log/nginx/error_log --http-log-path=/var/log/nginx/access_log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --add-module=/opt/ngx_cache_purge-master --add-module=/usr/local/src/nginx-upstream-fair --add-module=/opt/nginx-sticky-module-ng/ && make
[root@proxy01 nginx-1.9.2]# /usr/local/nginx/sbin/nginx -s stop
[root@proxy01 nginx-1.9.2]# cp objs/nginx /usr/local/nginx/sbin/
cp: overwrite `/usr/local/nginx/sbin/nginx'? y
[root@proxy01 nginx-1.9.2]# /usr/local/nginx/sbin/nginx
使用語法:
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以為任何的string字符,默認是route
domain:哪些域名下可以使用這個cookie
path:哪些路徑對啟用sticky,例如path/test,那么只有test這個目錄才會使用sticky做負載均衡
expires:cookie過期時間,默認瀏覽器關閉就過期,也就是會話方式。
no_fallbackup:如果設置了這個,cookie對應的服務器宕機了,那么將會返回502(bad gateway 或者 proxy error),建議不啟用
upstream StaticServer {
#ip_hash;
# hash $request_uri;
sticky name=cookie expires=1h domain=.51yuki.cn path=/;
server 10.100.100.105:8082 weight=2 max_fails=2 fail_timeout=2;
server 10.100.100.104:8082 weight=1 max_fails=2 fail_timeout=2;
#server 10.100.100.106 backup;
#fair;
}
瀏覽器訪問:
Cookie:UM_distinctid=15dc7020b0daed-09516b462eb88e-474a0521-15f900-15dc7020b0e9f6; _ga=GA1.2.1539088355.1513867128; cookie=7e5f2b9a2ddae0a19a42ac2aedc8f52d
upstream StaticServer {
#ip_hash;
# hash $request_uri;
#sticky name=cookie expires=1h domain=.51yuki.cn path=/;
server 10.100.100.105:8082 weight=2 max_fails=2 fail_timeout=2;
server 10.100.100.104:8082 weight=1 max_fails=2 fail_timeout=2;
sticky expires=1h domain=.51yuki.cn;
#server 10.100.100.106 backup;
#fair;
}
瀏覽器訪問:
Cookie:UM_distinctid=15dc7020b0daed-09516b462eb88e-474a0521-15f900-15dc7020b0e9f6; _ga=GA1.2.1539088355.1513867128; cookie=7e5f2b9a2ddae0a19a42ac2aedc8f52d; route=7e5f2b9a2ddae0a19a42ac2aedc8f52d
- 第一部分:Nginx Web服務
- 第一章: Nginx的初探
- 第二章:Nginx的安裝部署
- 第一節:在centos6上通過Yum安裝Nginx
- 第二節:在Centos7上通過Yum安裝nginx
- 第三節:編譯安裝Nginx服務
- 第四節: Nginx編譯參數詳解
- 第五節: Nginx的啟動腳本
- 第六節:Nginx的shell腳本安裝
- 第七節:nginx服務的平滑升級
- 第三章:Nginx服務基礎配置
- 第一節: 配置運行nginx服務器用戶
- 第二節:配置運行生成的worker processes進程數
- 第三節:配置Nginx進程PID存放路徑
- 第四節:定義MIME類型
- 第五節:自定義nginx的訪問日志
- 第六節:主配置段(main)常用的配置
- 第七節:http段(核心)常用的配置命令
- 第八節:配置nginx中的location段
- 第九節: 基于IP的訪問控制
- 第十節:基于用戶的訪問控制
- 第十一節:Nginx定義status狀態頁
- 第十二節:Nginx服務器Rewrite重寫
- 第十三節:Nginx服務配置防盜鏈
- 第十四節:nginx軟件的優點
- 第四章:Nginx服務器的優化配置
- 第一節:nginx.conf配置文件基本參數優化
- 第二節:fastcgi調優
- 第三節:Gzip調優
- 第四節:expires緩存調優
- 第五節:內核參數優化
- 第六節: Nginx之——413 修改上傳文件大小限制
- 第五章:Nginx虛擬主機的配置
- 第一節:基于名稱的虛擬主機
- 第二節:通過shell腳本添加虛擬主機
- 第六章:Nginx常用模塊指令詳解
- 第一節:ngx_http_realip_module
- 第二節:http_image_filter_module
- 第三節:tengine中配置consistent hash module
- 第四節:ngx_http_userid_module
- 第七章:Nginx服務器配置HTTPS訪問
- 第八章: Nginx服務器日志切割
- 第二部分:Nginx負載均衡反向代理服務
- 第一章:Nginx進階參數詳解
- 第一節:proxy_module參數詳解
- 第二節:upstream_module參數詳解
- 第四章:Nginx反向代理服務
- 第一節:Nginx反向代理配置參數詳解
- 第二節:Nginx反向代理服務配置案例
- 第三節:Nginx緩存
- 第四節: Nginx中fastcgi模塊
- 第五節:nginx+fastcgi實現動靜分離架構
- 第五章:Nginx負載均衡
- 第一節:ngx_http_upstream_module常見指令
- 第二節:調度方法
- 第三節:健康狀態檢查