【web服务】nginx为什么这么受企业欢迎?看完这边文章你就懂了

本文详细介绍了Nginx的工作原理,探讨了同步与异步、阻塞与非阻塞的概念,并通过实例解释了这四种组合方式。重点讲解了Nginx如何利用epoll模型实现异步非阻塞,以应对高并发场景。文章对比了Nginx与Apache在进程管理、网络IO模型、阻塞方式以及模块开发方向上的区别,强调了Nginx的高性能优势。此外,还介绍了Nginx的两种工作模式以及配置文件详解,帮助读者深入理解Nginx的配置和使用。最后,文中给出了多个基于Nginx的实战实验,涵盖了从安装到高级功能的配置,包括状态统计、目录保护、身份验证、虚拟主机、反向代理和负载均衡等。
摘要由CSDN通过智能技术生成

?? 个人简介
?? 作者简介:大家好,我是小鹏linux,运维领域创作者,阿里云ACE认证高级工程师??
?? 个人主页:小鹏linux??
?? 支持我:点赞??+收藏+留言??
??格言:你未必出类拔萃,但一定与众不同!??
?? 系列专栏:
?? 阶段一:windows基础 目前原创16篇
?? 阶段二:Linux基础知识 目前原创38篇
?? 阶段三:shell基础+shell高级 目前原创23篇
?? 阶段四:python基础及自动化应用 目前原创4篇
?? 阶段五:Linux网络服务 目前原创1篇
?? 阶段六:集群原理及架构 原创未开始
?? 阶段七:云计算虚拟化技术 原创未开始

目录

一. 讲在Nginx之前

???1.同步与异步

???1.1实例解释

???2.阻塞与非阻塞

???2.1实例解释

???3.epoll模型

???4.为什么Nginx比其他web服务器并发高(Nginx工作原理)

???4.1进程管理上的区别

???4.2网络IO模型的选择

???4.3进程的阻塞方式的区别

???4.4模块开发方向不同

???5.nginx和apache的差异对比

???6.nginx配置文件详解

?二.?Nginx详解

1.概述?

???2.工作模式

???2.1master-worker

???2.2单进程模式

三.Nginx相关搭建实验

???1.yum安装nginx

???1.2主配置文件

???1.3子配置文件

???2.源码包安装nginx

???实验1:Nginx的状态统计

???实验2:nginx目录保护

???实验3:基于IP的身份验证

???实验4:nginx的虚拟主机(基于域名)

???实验5:nginx的反向代理

???实验6:负载调度(负载均衡)

???实验7:samba服务-网络共享存储(CIFS文件系统)

???实验8:nginx实现https {证书+rewrite}


一. 讲在Nginx之前

1.同步与异步

同步与异步的重点在消息通知的方式上,也就是调用结果的通知方式不同。

**同步:**当一个同步调用发出去后,调用者要一直等待调用的结果通知后,才能进行后续的执行。

**异步:**当一个异步调用发出去后,调用者不必一直等待调用结果的返回,异步调用,要想获得结果,一般有两种方式:

1、主动轮询异步调用的结果;

2、被调用方通过callback(回调通知)来通知调用方调用结果。

1.1实例解释

**同步取快递:**小明收到快递将送达的短信,在楼下一直等到快递送达。

**异步取快递:**小明收到快递将送达的短信,快递到楼下后,小明再下楼去取。

异步取快递,小明知道快递到达楼下有两种方式:

1、不停的电话问快递小哥到了没有,即主动轮询;

2、快递小哥到楼下后,打电话通知小明,然后小明下楼取快递,即回调通知。

**2.**阻塞与非阻塞

阻塞与非阻塞的重点在于进/线程等待消息时候的行为,也就是在等待消息的时候,当前进/线程是挂起状态,还是非挂起状态。

**阻塞:**调用在发出去后,在消息返回之前,当前进/线程会被挂起,直到有消息返回,当前进/线程才会被激活

**非阻塞:**调用在发出去后,不会阻塞当前进/线程,而会立即返回。

2.1实例解释

**阻塞取快递:**小明收到快递即将送达的信息后,什么事都不做,一直专门等快递。

**非阻塞取快递:**小明收到快递即将送达的信息后,等快递的时候,还一边敲代码、一边刷微信。

同步与异步,重点在于消息通知的方式;阻塞与非阻塞,重点在于等消息时候的行为。

所以,就有了下面4种组合方式

  1. 同步阻塞:小明收到信息后,啥都不干,等快递;
  2. 同步非阻塞:小明收到信息后,边刷微博,边等着取快递;
  3. 异步阻塞:小明收到信息后,啥都不干,一直等着快递员通知他取快递;
  4. 异步非阻塞:小明收到信息后,边刷着微博,边等快递员通知他取快递。

大部分程序的I/O模型都是同步阻塞的,单个进程每次只在一个文件描述符上执行I/O操作,每次I/O系统调用都会阻塞,直到完成数据传输。传统的服务器采用的就是同步阻塞的多进程模型。一个server采用一个进程负责一个request的方式,一个进程负责一个request,直到会话结束。进程数就是并发数,而操作系统支持的进程数是有限的,且进程数越多,调度的开销也越大,因此无法面对高并发。

Nginx采用了异步非阻塞的方式工作。我们先来先了解一下I/O多路复用中的epoll模型。

3.epoll模型

当连接有I/O事件产生的时候,epoll就会去告诉进程哪个连接有I/O事件产生,然后进程就去处理这个事件。

例如:小明家楼下有一个收发室,每次有快递到了,门卫就先代收并做了标记;然后通知小明去取送给小明的快递。

**4.**为什么Nginx比其他web服务器并发高(Nginx工作原理)

Nginx配置use epoll后,以异步非阻塞方式工作,能够轻松处理百万级的并发连接。

**处理过程:**每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到可能发生阻塞的地方。比如向后端服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果后端服务器返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有新的request 进来,他就可以很快再按这种方式处理。而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。通过这种快速处理,快速释放请求的方式,达到同样的配置可以处理更大并发量的目的。

4.1进程管理上的区别

Apache:

默认采用的是一个主进程 多个工作进程 每个工作进程管理一个线程 每

个线程管理一个连接

并发数 = 工作进程数 x 1

Nginx:

一个主进程 多个工作进程 每个工作进程管理多个线程(最大到65535)

并发数 = 工作进程数 x 单进程开启的线程数

淘宝等电商用的web浏览器 Tengine ,相当与Nginx的换皮,通过nginx开源项目针对电商优化的产品

4.2网络IO模型的选择

Apache:select模型

Nginx:epoll模型

select就是一个简单的选择模型(如排队请求网络资源,第一个人阻塞住第二个人

依然要排着)

epoll更智能的网络管理模型(如排队第一个人阻塞住,会先把第二个人网络的 IO

请求提交出来)

4.3进程的阻塞方式的区别

Apache:同步 阻塞型

Nginx:异步 非阻塞型

4.4模块开发方向不同

Apache:安全模块众多

Nginx:高性能模块众多

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值