nginx最常提到的是负载均衡,处理高并发能力。简单说明
1》 nginx的反向代理
什么是正向代理?服务器架设在客户机与目标机之间,用户向客户机发送请求并指定目标(原始服务器),通过代理服务器对原始服务器进行连接请求,返回结果通过代理服务器返回给客户机,客户机必须指定代理服务器。(正向代理的服务器架设在客户机端)
反向代理就是反向代理的服务器架设在服务器端, 客户机发起的请求向代理服务器,代理服务器有选择的转发给内网目标服务器。
2》 nginx负载均衡策略
(2.1)内置策略 (加权轮询和ip hash)
轮询:每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,自动剔除分配到下一个服务器
加权轮询:每个请求按照时间顺序,分配到不同的后端服务器,通过设定加权权重(即指定轮询权重),权重越高,分配到的服务器几率越高
加权轮询是先深度,再广度,先分配权重高的服务器,当该服务器的权重降低到比其他机器低后,开始分给下一个权重高的机器,依次进行轮询处理
当所有服务机器down后,nginx会立即对机器做清位成初始化状态,以避免造成所有的机器处于timeout状态,而导致所有全段都卡死。
ip hash策略
上述中,在负载均衡系统中的加权轮询下,假如用户在某个服务器上登陆,用户第二次请求的时候,我们的系统又会根据加权轮询的方式重新
定位到服务器集群中的某一个,已经登陆的用户需重新定位到另外一台服务器上,其登陆信息会丢失,这样明显就不妥了。
ip_hash策略就是处理: 如果用户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
存在一个缺点:有些公用路由器,其节点上的流量会有成千上万的用户,该流量会非常大,也达不到分流
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
(2)扩展策略
2.1 fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
受网络等外部环境情况偏大
2.2 url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
(3) 通用hash、一致性hash
这两种也是扩展策略,在具体的实现上有些差别,通用hash比较简单,可以以nginx内置的变量为key进行hash,一致性hash采用了nginx内置的一致性hash环,可以支持memcache。