Nginx(发音同engine x)是异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存。一大部分Web服务器使用Nginx,通常作为负载均衡器。

反向代理

  设置一台服务器作为后台目标服务器的代理,目标服务器只允许和代理服务器通信。用户的请求必须先通过代理服务器,再由代理服务器分发给目标服务器,主要起到负载和安全的作用。
  
  关于反向代理和正正向代理可以参考另一篇文章——反向代理与正向代理

负载均衡器

  反向代理是实现负载均衡的基石,实现负载均衡有5种策略。分别是ip轮询、指定权重、ip绑定session、最快响应、url指定。

ip 轮询

  在分布式系统中,多台机器提供服务,通过ip轮询的策略,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。

1
2
3
4
upstream zhoupq.com { 
server 192.168.1.1;
server 192.168.1.2;
}

指定权重

  上述多台机器硬件条件不一,性能不一,系统需要将更多的请求引向性能更优的机器。为每个server 配置权重值,便能指定轮询几率,权重与访问率成正比。

1
2
3
4
upstream zhoupq.com { 
server 192.168.1.1 weight=4;
server 192.168.1.2 weight=6;
}

ip 绑定 session

  当后台服务保存session时,为了解决session分布不一致问题,可以对每个请求按照访问ip的hash结果分配,相同的ip必然会落在同一台服务器,即每个访客固定访问一个后端服务器。

1
2
3
4
5
upstream zhoupq.com { 
ip_hash;
server 192.168.1.1;
server 192.168.1.2;
}

  关于ip_hash的原理,参考Nginx的ip_hash解析

最快响应

  我们不能保证每台机器在运行时响应时间一致,比如某台机器高负荷工作,另一台线程空闲。为了实现系统高性能,可以按后端服务器的响应时间来分配请求,响应时间短的机器优先分配。

1
2
3
4
5
upstream zhoupq.com { 
server 192.168.1.1;
server 192.168.1.2;
fair;
}

url 指定

  根据请求url的hash结果来分配请求,使每个url定向到同一个后端服务器,比ip_hash 粒度更细。当后端服务器为缓存或静态数据时比较有效。

1
2
3
4
5
upstream zhoupq.com { 
server 192.168.1.1;
server 192.168.1.2;
hash $request_uri;
}

HTTP缓存

  负载均衡器可以存储静态内容,当用户请求它们时可以直接响应用户而不必再向后台服务器请求。常见的前端缓存工具为CDN。