【扫盲】Nginx 是什么?和 Apache 什么关系?
作为一个测试从业者,势必会需要了解到测试环境搭建、网络协议方面的知识,之前从网上零散的学到一些关于环境搭建的操作,但仍然对整个项目的架构不是很清楚。多学习网络方面的基础知识,对项目的测试开展工作十分有帮助。
1. 几个概念
之前我在虚拟机模拟搭建公司的测试环境以及系统迭代上线的时候,总是听到开发说到过几个概念,当时似懂非懂。一个是【轮询分发】,一个是【反向代理】,一个是【负载均衡】。听名字好像也懂,但原理是什么,不看点书或文章,你还真说不上来。

先解释一下:Nginx 和 Apache 一样,都是一种 Web 服务器。
他们都是基于REST架构风格,以URI和URL作为沟通依据,通过HTTP协议提供网络服务。(这里的REST是什么不懂,需要百度了解)
2. 搭建项目,选择 Nginx ,还是 Apache ?

Nginx 由于其自由、开源、高性能的优点,目前被广泛用于 HTTP服务器和反向代理服务器。例如我们公司的项目采用的就是1台Nginx+3台Apache的配置,Nginx作为反向代理,采用轮询分发机制。
3. 两种模式的区别

4. 示意图和拓扑图




在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;
在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息
5. 现在再来说说【负载均衡】和【轮询分发】
(1)负载量
客户端发送的、Nginx反向代理服务器接收到的请求数量。
(2)均衡规则
请求数量按照一定的规则进行分发到不同的服务器处理的规则。
(3)负载均衡
将服务器接收到的请求按照规则分发的过程。
(4)Nginx支持的负载均衡调度算法方式
weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。
6. 几种常用web服务器对比

参见原文:「芋道源码」公众号《Nginx 是什么 ? 能干嘛 ?》