Nginx的调度算法教程
一、ip\_hash
vim /etc/nginx/nginx.conf
http {
upstream websrvs {
server 192.168.1.4:80;
server 192.168.1.6:80;
server 127.0.0.1:8080 backup;
<strong> ip_hash;</strong>
}
}
在nginx的主配置文件的http语句中添加ip\_hash 即可
nginx -s reload<br></br>#重读服务
注释:根据源地址进行hash运算,hash值相同,调度到同一台电脑上
二、hash key [consistent]
基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者组合
1、 hash $remote\_addr; 等同于ip\_hash
vim /etc/nginx/nginx.conf
http {
upstream websrvs {
server 192.168.1.4:80;
server 192.168.1.6:80;
server 127.0.0.1:8080 backup;
<strong> hash $remote_addr;</strong>
}
}
在nginx的主配置文件的http语句中添加 hash $remote\_addr;即可
nginx -s reload<br></br>#重读服务
2、hash $request\_uri consistent; 目标hash,相当于lvs中的dh
只要访问的地址是固定的,就往同一台服务器上调度
vim /etc/nginx/nginx.conf
http {
upstream websrvs {
server 192.168.1.4:80;
server 192.168.1.6:80;
server 127.0.0.1:8080 backup;
<strong> hash $request_uri; </strong>
}
}
在nginx的主配置文件的http语句中添加hash $request\_uri; 即可
nginx -s reload<br></br>#重读服务
3、hash $cookie\_name; #key为name的cookie
针对cookie调度
http {
upstream websrvs {
server 192.168.1.4:80;
server 192.168.1.6:80;
server 127.0.0.1:8080 backup;
hash $cookie_sessionid;
}
}
网站是根据sessionid来判断身份的这里就写sessionid,网站如果是根据userid就写userid。
测试访问:
1 [10:48:43 root@www ~]#curl -b sessionid=123456 www.test.net
2 192.168.1.6
作用:将请求分类,同一类请求将发往同一个upstream server,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用
keepalive 连接数N;
为每个worker进程保留的空闲的长连接数量,可节约nginx端口,并减少连接管理的消耗