1、Nginx的介绍
Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,第一个公开版本发布于2004年,其源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
中国大陆使用Nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。
2、Nginx的特点
2.1、反向代理
2.1.1 什么是代理?
客户端与服务端之间添加了一个代理服务器,客户端和服务端之间通过下面的方式进行资源访问与返回: 客户端 -->代理方-->服务端,服务端-->代理方-->客户端。
没有代理的情况:
有代理的情况:
2.1.2 反向代理概括
代理方 代理了 服务端,当客户端访问服务器时,实际上需要先访问反向代理服务器,反向代理服务器通过去选择目标服务器获取数据后,在返回数据给客户端。
2.1.3 反向代理的特点
(1)客户端对代理无感知
(2)服务器暴露的是反向代理的服务器的地址而不是真实服务器的地址
(3)在服务器中配置代理服务器
2.1.4 正向代理
概括: 代理服务器代理客户端去定向访问目标服务器,是在客户端配置代理服务器的。
例子:假如你需要访问一个国内无法访问或者访问很慢的服务器,你可以通过挂梯子的方式去访问对应的服务器,这里的梯子就是正向代理的代理方,它可以代替你访问目标服务器。
2.1.5 正向代理与反向代理的区别
正向代理:正向代理隐藏了客户端的真实身份,使得服务端看到的是代理服务器的请求,而不是客户端的直接请求。正向代理作用于客户端。
反向代理:反向代理隐藏了后端服务器的真实身份,客户端不知道其请求被转发到了哪个具体的服务器。反向代理作用于服务端。
总结一句话来讲就是:正向代理代理的是客户端,反向代理代理的是服务端。
2.2、负载均衡
2.2.1 负载均衡概括
当业务量特别大的时候,用户的请求特别多,一台服务器无法满足业务需求,就需要有很多台服务器。对于这些服务器,当请求发到代理服务器时,如何进行分配对应的请求,这个过程就是负载均衡。
2.2.1 负载均衡作用
通过将流量均匀分配到多个后端服务器上,从而提高系统的整体处理能力和响应速度,增强服务的可靠性和高可用性,并能有效处理服务器故障和流量高峰,保证服务的连续性和稳定性。
2.2.1 负载均衡算法
Nginx用到的负载均衡的算法有很多种,这里介绍简单的三种。
2.2.1.1 基于轮询的算法(默认)
每个请求按时间顺序逐一分配到不同的后端服务器后端服务器down后会被自动剔除。
2.2.1.2 基于权重的算法
指定轮询的几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2.2.1.3 基于ip_hash的算法
如果用户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器,每个请求按访问ip的hash结果分配这样每个方可固定访问一个后端服务器,可以解决session的问题。
3、Nginx的优点
3.1、占有内存小
Nginx设计的初衷之一就是高效的内存使用。它采用了事件驱动(event-driven)和异步非阻塞(asynchronous n
on-blocking)架构,这使得Nginx在处理大量并发连接时能保持低内存消耗。(这里不对两个架构进行介绍),这种设计使得Nginx在相同硬件条件下,能够比传统的进程/线程模型的服务器(如Apache HTTP Server)消耗更少的内存。
3.2、并发能力强
Nginx的高并发处理能力得益于其事件驱动和异步非阻塞架构,其具体表现包括:
(1)单进程/多线程模型,Nginx主要依赖少量的工作进程(worker processes),每个进程可以处理数千个并发连接。这避免了线程或进程切换带来的开销。
(2)轻量级资源消耗,每个并发连接占用的资源非常少,这使得Nginx能够处理大量并发请求而不容易出现资源瓶颈。
(3)高效连接复用,Nginx在处理HTTP长连接和保持连接(keep-alive)方面非常高效,这进一步提高了其并发处理能力。
这些特点使得Nginx在高并发场景下表现优异,常被用作反向代理服务器、负载均衡器和静态内容服务器。
3.3、性能高
Nginx的高性能体现在多个方面,包括请求处理速度快、响应时间短和吞吐量高。表现有:高效的请求处理、快速静态内容服务、负载均衡和缓存。这些性能优势使得Nginx在高流量和高负载的应用场景中广受欢迎,如大型网站、视频流媒体和在线服务等。
这里着重讲解一下快速静态内容服务,Nginx对静态内容的处理非常高效,能够以极低的延迟提供静态文件,适用于静态网站和内容分发网络(CDN)。
3.4、支持热部署
Nginx支持热部署(Hot Deployment),即在不停止服务的情况下进行配置更新和程序升级,具体表现为平滑升级和无缝重启。