是什么?

Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。

功能

反向代理

Nginx作为反向代理器可以代表我们要访问的目标服务器。

Nginx作为代理服务器的工作流程:

代理服务器接收请求,然后将请求转发给内部网络中集群化的服务器,后端服务器将请求处理并返回结果给Nginx代理服务器,Nginx再将结果转发给客户端。

期间有一个速度匹配问题:

由于客户端和Nginx是通过公网传输,速度比较慢;Nginx和服务器之间是内网或者线路传输,速度比较快。为了匹配后端服务器与客户端之间的速度匹配问题,通常在Nginx代理服务器中会有一个缓存。

处理方式

Nginx代理一次性接收客户端所有HTTP包(完整)放在缓存中,然后转发给后端服务器,服务器处理后将结果返回给Nginx代理器,Nginx代理一边接收一边转发给客户端。

Nginx在反向代理上,根据不同的场景采用不同的转发策略,灵活多样。

负载均衡

在高并发情况下,将数据流分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,提高数据的吞吐量。

基本工作流程
  • 先将大量的并发访问或数据流量分担到多台节点设备上分别处理,减少了用户等待响应的时间
  • 再将单个重负载的运算分担到多台节点设备上并行处理,每个节点设备处理结束后,汇总返回给用户,系统处理能力提高
Nginx可使用的负载均衡策略有:
  • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果端服务器down调,能自动剔除
  • 权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均衡的情况。性能好的多分配,性能差的少分配。
  • ip_hash(ip绑定):每个请求按访问ip的hash结果分配,这样访客固定访问一个后端服务器,可以解决session问题。
  • url_hash(第三方):按访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存是比较有效
  • fair(第三方) :按后端服务器响应时间来分配请求,响应时间短的优先分配

动静分离

Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。
Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。
静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。
动态请求由相应的后端服务器处理。

Nginx的特点

  • 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。
  • 配置异常简单,非常容易上手。配置风格跟程序开发一样
  • 非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)
  • 事件驱动:通信机制采用epoll模型,支持更大的并发连接。
  • master/worker结构:一个master进程,生成一个或多个worker进程
  • 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)
  • 成本低廉:Nginx为开源软件,可以免费使用。
  • 内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
  • 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
  • 稳定性高:用于反向代理,宕机的概率微乎其微
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐