Nginx的核心特点

跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;

配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置;

非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);

PS:对于一个Web服务器来说,首先看一个请求的基本过程:建立连接—接收数据—发送数据,在系统底层看来 :上述过程(建立连接—接收数据—发送数据)在系统底层就是读写事件

①如果采用阻塞调用的方式,当读写事件没有准备好时,必然不能够进行读写事件,那么久只好等待,等事件准备好了,才能进行读写事件,那么请求就会被耽搁 。

②既然没有准备好阻塞调用不行,那么采用非阻塞调用方式。非阻塞就是:事件马上返回,告诉你事件还没准备好呢,你慌什么,过会再来吧。好吧,你过一会,再来检查一下事件,直到事件准备好了为止,在这期间,你就可以先去做其它事情,然后再来看看事件好了没。虽然不阻塞了,但你得不时地过来检查一下事件的状态,你可以做更多的事情了,但带来的开销也是不小的。

事件驱动:通信机制采用epoll模型,支持更大的并发连接。

①非阻塞通过不断检查事件的状态来判断是否进行读写操作,这样带来的开销很大,因此就有了异步非阻塞的事件处理机制。这种机制让你可以同时监控多个事件,调用他们是阻塞的,但可以设置超时时间,在超时时间之内,如果有事件准备好了,就返回。这种机制解决了上面阻塞调用与非阻塞调用的两个问题。

②以epoll模型为例:当事件没有准备好时,就放入epoll(队列)里面。如果有事件准备好了,那么就去处
理;如果事件返回的是EAGAIN,那么继续将其放入epoll里面。从而,只要有事件准备好了,我们就去处理它,只有当所有事件都没有准备好时,才在

epoll里面等着。这样,我们就可以并发处理大量的并发了,当然,这里的并发请求,是指未处理完的请求,线程只有一个,所以同时能处理的请求当然只有一
个了,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价,你可以理解为循环处理多个准备好的事
件,事实上就是这样的。

③与多线程方式相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换

事件处理非常的轻量级,并发数再多也不会导致无谓的资源浪费(上下文切换)。对于IIS服务器,每个请求会独占一个工作线程,当并发数上到几千时,就同时
有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战:因为线程带来的内存占用非常大,线程的上下文切换带来的cpu开销很大,自然性能就上不
去,从而导致在高并发场景下性能下降严重。

总结:通过异步非阻塞的事件处理机制,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级

Master/Worker结构:一个master进程,生成一个或多个worker进程。

PS:Master-Worker设计模式核心思想是将原来串行的逻辑并行化

并将逻辑拆分成很多独立模块并行执行。其中主要包含两个主要组件Master和Worker,Master主要将逻辑进行拆分,拆分为互相独立的部分,同
时维护了Worker队列,将每个独立部分下发到多个Worker并行执行,Worker主要进行实际逻辑计算,并将结果返回给Master。

问:nginx采用这种进程模型有什么好处?

答:采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,Master
进程则很快重新启动新的Worker进程。当然,Worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前Worker上的所有请求失
败,不过不会影响到所有请求,所以降低了风险。

内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。

节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

稳定性高:用于反向代理,宕机的概率微乎其微。

时间: 2024-10-06 10:03:48

Nginx的核心特点的相关文章

【Nginx】核心模块ngx_events_module

核心模块ngx_events_module是一个专门用于管理事件模块的模块.它的实现很简单,下面是该模块的定义: ngx_module_t ngx_events_module = { NGX_MODULE_V1, &ngx_events_module_ctx, /* module context */ ngx_events_commands, /* module directives */ NGX_CORE_MODULE, /* module type */ NULL, /* init mast

nginx http核心模块指令(一)

alias   root nginx配置下有两个指定文件夹的指令.root和alias location /img/ { alias /var/www/image/; } #若依照上述配置的话,则訪问/img/文件夹里面的文件时.ningx会自己主动去/var/www/image/文件夹找文件 location /img/ { root /var/www/image; } #若依照这样的配置的话,则訪问/img/文件夹下的文件时,nginx会去/var/www/image/img/文件夹下找文件

Nginx http核心模块的内置变量

$uri: 当前请求的uri,不带参数 $request_uri: 请求的uri,带完整的参数 $host: http请求报文中的host首部:如果请求中没有host首部,则以处理此请求中虚拟主机的主机名代替: $hostname: 运行nginx服务的服务器主机名 $remote_addr: 客户端IP $remote_port: 客户端的端口 $remote_user: 使用用户认证时,客户端用户输入的用户名 $request_filename:用户请求中的URI经过本地root或者alia

Nginx 高效核心 - IO 复用模型

1. 图示 Nginx 服务处理请求简略过程 2. I/O 模型概述 2.1 同步/异步       同步:Synchronous,调用者等待被调用者返回消息,才能继续执行. 异步:Asynchronous,被调用者通过状态.通知或回调机制主动通知调用者自己的运行状态. 2.2 阻塞/非阻塞       阻塞:Blocking,指 IO 操作需要彻底完成之后才返回到用户空间,调用结果返回之前,调用者被挂起. 非阻塞:Noblocking,指 IO 操作被调用后立即返回给用户一个状态值,无需等到

nginx学习(五):nginx.conf 核心配置文件详解

整体结构 详细信息 1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody user root; 2.worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行 worker_processes 1; 3.nginx 日志级别debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大 4.设置nginx进程 pid pid

【nginx】【转】Nginx核心进程模型

一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个较为完整的整体框架结构如图所示: 二.核心进程模型 启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程. nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,没有监控进程. Nginx的核心进程模型框图如下: master进程 监控进程充当整个进

nginx的使用

1.nginx的下载 解压后文件目录: 2.nginx的常用命令 nginx -s stop 强制关闭  nginx -s quit 安全关闭  nginx -s reload 改变配置文件的时候,重启nginx工作进程,来时配置文件生效  nginx -s reopen 打开日志文件 3.nginx的核心:nginx.conf配置文件 #运行nginx的所属组和所有者 #user nobody; #表示工作进程的数量,一般设置为cpu的核数 worker_processes 1; #错误日志路

mysql+nginx+php+memcache

***************** mysql+nginx+php+memcache ****************** 1.Mysql 安装 软件包依赖性: # yum install -y gcc-c++ make ncurses-devel bison openssl-devel zlib-devel cmake-2.8.12.2-4.el6.x86_64.rpm # tar zxf mysql-boost-5.7.17.tar.gz # cd mysql-5.7.17/ cmake -

nginx常用配置系列-虚拟主机

本来准备详尽的出一份nginx配置讲解,但nginx功能配置繁多,平常使用中使用最多的一般有: 1. 虚拟主机配置 2. HTTPS配置 3. 静态资源处理 4. 反向代理 ================= 虚拟主机配置 ================= 先说虚拟主机配置,nginx的核心配置文件在nginx的安装目录下conf目录中(如果是CentOS通过yum安装则在/etc/nginx目录中) 在conf目录下创建vhost目录,方便管理虚拟主机的配置文件 mkdir vhost 以e