第一章 Nginx初探
Nginx
是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。那么你可能会问了:“不是说 Nginx
吗?怎么又扯出来一个 Web 服务器呢?啥是服务器?”。别着急,在学习 Nginx
之前你还真得知道什么是服务器这个概念,下面我们先来看下到底啥是服务器。
1.1 什么是服务器?
服务器的英文叫 Server
, 顾名思义就是为其他人服务
的。我们可以把所有为其他用户提供服务的机器或软件都称作服务器
。
Server
可以指硬件,比如谷歌公司对用户提供服务的主机,下图是谷歌公司的一个数据中心图片,走道两侧亮着红黄蓝颜色的笨重机器就是服务器。Server
也可以是一个软件。比如我们本次专栏要介绍的Nginx
,它就是一个对用户提供HTTP
服务的Server
。又比如我们常听到的网易邮箱服务器,它就是专门为用户提供邮件服务的。这些软件都运行在一个个物理机器上面,专门对外提供对应的服务。
1.2 什么是web服务器?
我们平时可以打开浏览器访问微博的网站,获取各种娱乐圈各种劲爆消息。这个看似简单的行为,背后有隐藏了那些细节呢?
上图就是一个典型的 web
请求流程,主要分为五个步骤:
- 浏览器本身作为一个客户端,当你输入
www.weibo.com
的时候,向DNS
服务器发出域名请求服务; DNS
服务器将域名将对应的IP
地址返回给浏览器;- 浏览器使用
IP
地址找到对应的服务器后,建立TCP
连接,向服务器发送HTTP
请求; - 服务器接收到请求之后才开始处理,返回
HTTP
响应; - 浏览器收到来自服务器的响应后开始渲染页面,最后断开与该服务器之间的
TCP
连接。
我们所介绍的 Web
服务器就是在第 3 和 4 步骤中发挥作用的。它的作用很简单,概括地讲,主要完成三个工作:
- 接收请求;
- 处理请求,生成响应 ;
- 发送响应。
1.3 web服务器的分类
其实,现在的市面上面有很多类似于 Nginx
的 Web 服务器,如下图:
1.3.1 几款服务器比较
下面我们简单地比较一下几款流行的 Web
服务器软件的区别。
- Apache 是一款历史悠久的开源
Web
服务器软件。拥有很多的第三方模块,你想使用的功能基本上都可以找到,避免自己重复造轮子。采用多进程方式处理请求,每个请求都对应于一个进程。在高并发的情况下,多进程处理方式特别的消耗资源,所以天然不适合高并发场景; Nginx
是年轻(相比Apache
)的开源Web
服务器软件。它也采用 C 语言编写,代码运行效率很高。它采用了epoll
(以Linux
为例) 事件处理机制作为模型,能够保证非常高的并发量;IIS
是微软的Web
服务器软件,这个可是收费的哦~~~
1.4 Nginx介绍
Nginx
是开源、高性能的 HTTP 服务器和反向代理服务器,也可以作为一个 IMAP/POP3
代理服务器。也就是说,Nginx
不仅可以托管网站,进行HTTP服务处理,还可以作为反向代理服务器。
Nginx
出现的初衷是为了解决著名的 C10K
问题而出现的。和传统的 Web Server 不一样,Nginx
使用了异步事件处理机制架构。这种架构可以轻松高效地处理大量的请求,并且非常的节省内存。高性能是Nginx
最大的优点。
1.4.1 为什么选择Nginx
- 占用内存小。这得益于
Nginx
使用 C 语言编写,能够高效使用 CPU、内存等系统资源。并且作者自己造了很多的轮子 , 比如Nginx
自己实现了内存管理系统,动态数组机制等。Nginx
作者对内存的使用控制简直到了丧心病狂的地步,所以非常的节省系统资源,特别是内存; - 高并发。在 Linux 系统上,
Nginx
使用了epoll
机制,能够高效处理大量的连接数。理论上,Nginx
可以同时处理的最大连接数取决于你的机器的物理内存,上不封顶; - 高可靠性。我认为
Nginx
的高可靠性主要体现在两方面:
(一):Nginx
使用了 Master-Worker 机制,真正处理请求的是Worker
进程。Master
进程可以监控Worker
进程的运行状况,当某个Worker
进程因意外原因退出的时候,Master
会重新启动Worker
进程;
(二):Nginx
的内部框架非常优秀。它的各个模块都非常简单,所以也非常的稳定。 - 热部署。可能大家觉得这个原因并不重要,其实在实际的线上环境是非常重要的。代码上线之后,我们只需要执行
nginx -s reload
命令就可以完成Nginx
的重启,其他的交给Nginx
就可以了,你可以安心去喝咖啡了。 Nginx
安装非常的简单,配置文件简洁,BUGS非常少的web服务器
1.4.2 Nginx能干啥?
上面我们 ‘吹嘘’ 了 Nginx
的这么多优点,那么 Nginx
究竟能干什么呢?
- 作为Web服务器:相比Apache,
Nginx
使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx
尤其受到虚拟主机提供商的欢迎。能够支持高达50000个并发连接数的响应。 - 作为负载均衡服务器:
Nginx
即可以在内部直接支持Rails和PHP
,也可以支持作为HTTP代理服务器对外进行服务。Nginx
用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal
要好得多 - 反向代理:
Nginx
是一款非常优秀的反向代理服务器。 - 作为邮件代理服务器:
Nginx
同时也是一个非常优秀的邮件代理服务器。