什么是nginx?
HTTP服务器、(这不陌生)
反向代理服务器、(负载均衡、分布式)
题外:什么是代理、反代理?
- 正向代理:
客户端非常明确访问的服务器地址。
服务器只清楚来自哪个代理服务器,而不清楚具体的客户端。
国内--------X---------->国外网站
国内------代理-------->国外网站 - 反向代理:
客户端不知道具体由哪个服务器处理。
服务器非常明确请求来自哪个客户端。
剁手党---------------->某淘
上亿剁手党---------->某淘—>[代理]------->服务器1
----------------------------------------------|------->服务器2
----------------------------------------------|------->…
----------------------------------------------|------->服务器n
nginx的优点
- 快
- 处理高并发更优秀
单机支持10万以上的并发连接单机支持10万以上的并发连接 - 高扩展
由多个耦合度极低的模块组成,造就了庞大的官方公布之外的第三方模块,它们和官方公布的一样容易使用。由多个耦合度极低的模块组成,造就了庞大的官方公布之外的第三方模块,它们和官方公布的一样容易使用。由多个耦合度极低的模块组成,造就了庞大的官方公布之外的第三方模块,它们和官方公布的一样容易使用。由多个耦合度极低的模块组成,造就了庞大的官方公布之外的第三方模块,它们和官方公布的一样容易使用。 - 高可靠
核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。 - 低内存消耗
一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础。一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础。 - 热部署
master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。 - 最自由的BSD许可协议
这是Nginx可以快速发展的强大动力。BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继续为Nginx贡献自己的智慧。
web服务器的请求处理机制
假如一个请求的处理,需要一把?和一把✂
- 多进程方式
主进程生成一个子进程出来和客户端建立连接进行交互。
每个人都分配一套?和✂,两个人互不干扰,但需要很多的?和✂。
进程与线程的一个简单解释http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
作者: 阮一峰
日期: 2013年4月24日
-
多线程方式
主进程派生出一个线程出来和客户端进行交互。
每个人共用一套?和✂,你用?时我用✂,协调进行,优点节省资源,但如果?和✂意外丢失,将导致所有人无法工作。 -
异步方式
食堂(同步)和摄像馆(异步):
食堂:排队打饭,前一个人打完饭,下个人才能打饭。
摄像馆:处理大量人流;将照过像的登记在册,明天来取照片,或者微信询问、微信通知您来取。
nginx基本处理架构
- Nginx启动后,会产生一个主进程,主进程执行一系列的工作后会产生一个或者多个工作进程
- 在客户端请求动态站点的过程中,Nginx服务器还涉及和后端服务器的通信。Nginx将接收到的Web请求通过代理转发到后端服务器,由后端服务器进行数据处理和组织;
- Nginx为了提高对请求的响应效率,降低网络压力,采用了缓存机制,将历史应答数据缓存到本地。保障对缓存文件的快速访问。
master进程
master进程主要用来管理worker进程,具体包括以下主要功能:
- 接收来自外界的信号
- 处理配置文件读取
- 创建,绑定和关闭套接字
- 启动,终止和维护worker进程数
- 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。
worker进程
worker进程的主要任务是完成具体的任务逻辑。其主要关注点是与客户端或后端真实服务器(此时nginx作为中间代理)之间的数据可读/可写等I/O交互事件。
- 接收客户端请求
- 将请求一次送入各个功能模块进行过滤处理
- 与后端服务器通信,接收后端服务器处理结果
- 数据缓存
- 响应客户端请求
end;