Nginx概述

nginx介绍

nginx是异步框架的web服务器,也可以用作反向代理、负载均衡、以及作为缓存服务器。nginx是目前互联 公司的web服务器的主流技术。用于处理高并发甚至海量并发的 站数据。nginx具有 区办和商业版, 区版是完全开源的,Tengine就是淘宝在nginx基础上进行二次开发,以获取更高的稳定性和并发能力,已经在淘宝、天猫等海量数据的电商 站经过了“双十一”的洗礼,足以证明其稳定性和高并发性能

nginx主要特性

  • 跨平台 Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。
  • 高并发、高性能 nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高,可以支持更多的并发连接,最大可以支持对5万并发连接数的响应;
  • 模块化设计 基于模块化设计,具有非常好的扩展性,具有丰富的模块库。可以通过加载、卸载某个模块(注意:模块动态加载在nginx V1.9.11版本之后才支持)以实现相应的功能
  • 热部署、热更新 nginx支持配置文件的热更新、版本热升级、平滑升级、动态加载模块,日志热更换;
  • 消耗内存低 据统计在1000个 keep-alive 连接模式下的非活动链接,仅消耗内存2.5M,采取分阶段资源分配技术,使得CPU与内存的占用率非常低;
  • 配置、维护简单 配置非常简单,容易上手
  • master/worker结构 一个master进程,生成一个或多个worker进程
  • 内置的健康检查功能 如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
  • 节省带宽 支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
  • 稳定性高 用于反向代理,宕机的概率微乎其微
  • 优秀的 络I/O模型 epoll模型,异步非阻塞、I/O多路复用。接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后端web服务器的压力。发送响应 文时,是边接收来自后端web服务器的数据,边发送给客户端。

nginx的基本功能

  • Http代理:HTTP的代理服务器既是Web服务器又是Web客户端。代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回 页,而是通过向代理服务器发送请求,信 会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。Http代理分为正向代理和反向代理

    • 正向代理:正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取的内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端必须要进行一些特别的设置才能使用正向代理。
    • 反向代理:作为web服务器最常用的功能之一。在服务器端接收客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。Nginx就是其中的一种反向代理服务器软件。
  • HTTP服务器:Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器

  • 负载均衡:根据后端服务器的特点,可以将请求数量按照一定的规则进行分发到后端不同的服务器上。Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略

  • WEB缓存:Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

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

  • FastCGI(php)、uWSGI(python)代理服务器:生产环境上经常使用nginx作为客户端请求后端应用服务(注意:此时nginx在用户看来依然是反向代理服务器,只不过这里代理的请求不再是http协议,而是跟后端服务相关的协议,比如后端如果是php语言开发的,则是FastCGI协议代理)

  • 虚拟主机:对于访问量太小的 站,出于成本考虑,可以将多个 站部署在同一台服务器上。

  • TCP/UDP 代理服务器:在一些并发量不大的情况下,有时候也会使用nginx作为四层调度器。

  • Mail邮件代理服务器:几乎不适用

nginx的典型应用场景

  • 实现负载均衡(LB)集群

请求先经过nginx,由nginx根据一定的分配规则进行请求的分发,将请求发送到不同的服务器上,实现分流。

当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力。

从单机 站到分布式 站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余的方式。将相同的应用部署到多台机器上。解决访问统一入口问题,我们可以在集群前面增加负载均衡设备,实现流量分发。

  • Nginx实现动静分离

为了加快 站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat、 Resin 处理动态页面。动静分离后,即使动态服务不可用,但静态资源不会受到影响。
(因为tomcat解析静态很慢,其实这些原理的话都很好理解,简单来说,就是通过 location 指定不同的后缀名使用正则表达式匹配过滤,然后交个不同的服务器,实现不同的请求转发。)

Nginx架构

如上图,Nginx为 master/workers 架构,一个master主进程,负责管理和维护多个 worker 进程,真正接受并处理用户请求的其实是 worker 进程, master 不对用户请求进行处理。即 master 主进程负责分析并加载配置文件,管理 worker 进程,接收用户信 传递以及平滑升级等功能。另外,nginx 具有强大的缓存能力,其中 Cache Loader 负责载入缓存对象,Cache Manager 负责管理缓存对象。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月3日
下一篇 2021年6月3日

相关推荐