1. 什么是nginx?
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。
Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
优点:
- 轻量 (占用内存少)
- 稳定 (有报告表明能支持高达 50,000 个并发连接数)
- 开源 (使用门槛低)
- 跨平台 (Linux、Windows、MacOS等都可以使用)
2. 解决了什么问题(应用场景)
1、上网问题
2、高并发的http请求的负载均衡
3、网站的动静分离
常见使用nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
3. 代理
正向代理:
常见的正向代理就是通过代理服务器上网,也就是大家常说的,开代理
反向代理
反向代理则是用户无感知的,由服务器端与代理服务器之间进行交互。
有两个好处:
1、集群间通过负载均衡调度目标服务器,优化服务器的负载,维持集群的稳定性;
2、保证内网的安全;不直接将服务器的外网端口打开,通常将反向代理作为公网访问地址,Web 服务器是内网。
4. 负载均衡
什么是负载量?
客户端发送的、Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量。什么是均衡?
请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则。什么是负载均衡?
所以将服务器接收到的请求按照规则分发的过程,称为负载均衡。
负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如 F5 负载均衡,相对造价昂贵成本较高。
但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作。
更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。
那么对于软件负载均衡,那么其所支持的负载均衡调度算法则尤为重要;
Nginx 支持的负载均衡调度算法方式如下:
①weight 轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx
会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。
权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
②ip_hash:每个请求按照发起客户端的 ip 的 hash 结果进行匹配,这样的算法下一个固定 ip
地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下 Session 共享的问题。③fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配。
响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少,它是结合了前两者的优点的一种调度算法。
但是需要注意的是 Nginx 默认不支持 fair 算法,如果要使用这种调度算法,请安装 upstream_fair 模块。
④url_hash:按照访问的 URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器,可以在 Nginx
作为静态服务器的情况下提高缓存效率。同样要注意 Nginx 默认不支持这种调度算法,要使用的话需要安装 Nginx 的 hash 软件包。
5. 动静分离
利用nginx实现网站的动静分离,主要目的初衷是,一些网站上包含一些静态资源、和一些动态资源,那么就可以将静态资源、动态资源分开,从而加快网站的解析速度,降低原来单个服务器的压力。