概述
- 我们需要对 Nginx 要有体系化的一个认识
- 对 Nginx 自身来说,它是作为一个中间件的,只要是中间件,它必然会涉及到前端和后端
- 对于 Nginx 来说,它是需要协调整个前后端的一个组件
- 那对于中间件来,我们要理解整个外部系统前端和后端是如何进行交互的
- 我们一个用户请求过来以后,是如何被前端处理
- 到后端以后,如何被我们的应用程序处理
- 处理完之后再返回给我们用户的
- 还有就是 Nginx 的部署和调优
- 第一个层次是使用 Nginx 进行一个简单的配置去把它用起来
- 第二个层次是需要深度优化
- 掌握 Nginx 能够帮助我们去迅速进行故障定位
- 包括协调前后端开发
- 分析整个系统一个性能瓶颈
- 给开发提供一些支持,都是非常有必要的
Nginx 概念定义
- Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
- Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的
- 第一个公开版本0.1.0发布于2004年10月4日, 其将源代码以类BSD许可证的形式发布
- 因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名
- 2011年6月1日,nginx1.0.4发布
- Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
- 在BSD-like协议下发行, 其特点是占有内存少,并发能力强
- 事实上nginx的并发能力确实在同类型的网页服务器中表现较好
- 中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
Nginx 历史背景
1 )Nginx 为何如此流行
- 在二十世纪初,互联网数据其实呈现一个快速增长,也就爆发式的增长
- 其实随着互联网数据的增长,体现在两个方面
- 第一个就是全球化,全球化之后,人与人之间,包括这个物联网,还有介入设备的数量的增多
- 导致我们现在互联网上的数据增长是特别快,就对硬件提出了更高的要求
- 在最早之前,我们的CPU设计是只有单核的,随着CPU的开始变成多核形式
- 第二个就是最早的一个应用程序服务器软件是Apache, 它处理请求比较低效
- 它是诞生在九十年代的一个产物来处理我们的web请求
- 对于 Apache 它天生设计就是设计在一个单核CPU之上的
- 它通常是用一个进程来处理一个请求
- 随着这种互联网数据的一个快速的增长,硬件设备也是有单CPU和多核的CPU
- 它一个进程只能处理一个请求,也就意味着如果我们想要处理更高的并发连接生产上
- 那我们就需要创建更多的一个进程,对于这样一个进程来说
- 比如说你现在有十万的并发链接,肯定是不能创建十万个进程来处理这样一个请求的
- 更重要的是一个进程处理多个请求就意味着一个进程在这个请求没有处理完之前
- 是不能够处理下一个请求的,比如说我们现在有多核CPU
- 继续用Apache来处理我们这个应用程序的时候
- 那也就意味着你的一个进程在同一时刻内只能处理一个请求
- 其实我们现在的CPU的设计不是用来处理单个应用程序的
- 而是服务于很多个应用程序的
- 那也就意味着我们的这应用程序之间需要不停的进行进程的一个切换。
- 进程切换就是有很大的一个这个开销
- 第一个就是全球化,全球化之后,人与人之间,包括这个物联网,还有介入设备的数量的增多
- 所以说,Nginx 之所以能够流行起来,就是因为诞生在这样两个背景之下
2 )Nginx 相较于 Apache 的优势
-
Apache
- 一个进程处理一个请求
- 阻塞式的
-
Nginx
- 一个进程处理多个请求
- 非阻塞式的
-
对于 Nginx 来说为什么能够适应高并发这样一种场景
-
因为是它诞生的比Apache要晚,所以它天生设计的时候,就是考虑到了高并发的这样一种场景
-
所以它其实是用一个进程来处理多个请求,并且它的事件处理模型是异步非阻塞的