深入理解Nginx 阅读笔记(一)

众所周知,Apache、Lighttpd、Tomcat、 Jetty、IIS等都是著名的Web服务器(这里就不详细介绍这几个服务器了,有兴趣的可以自己查资料),那为什么我要特意学习Nginx呢?最重要的原因当然是——互联网公司(尤其是杭州的某个电商公司)面试的时候可以瞎xx吹一波,显得自己很叼(开玩笑的,最重要的原因还是其性能的优越性,我们下面细谈)

Nginx是一个跨平台的Web服务器,可运行在Linux、FreeBSD、Solaris、AIX、Mac OS、 Windows等操作系统上,并且它还可以使用当前操作系统特有的一些高效API来提高自己的性能。例如,对于高效处理大规模并发连接,它支持Linux上的epoll、Solaris上的event ports和FreeBSD上的kqueue等(我只了解epoll I/O复用技术,剩下的并不了解,有兴趣的可以一起探讨epoll的实现和使用之类的)。

nginx的性能优越性体现在几个方面(直接参照书):

(1) 更快

这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期(如有数以万计的并发请求), Nginx可以比其他Web服务器更快地响应请求。

(2) 高扩展性

Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。而且在HTTP模块中,还设计了HTTP过滤器模块:一个正常的HTTP模块在处理完请求后,会有一串HTTP过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的HTTP模块时,不但可以使用诸如HTTP核心模块、events模块、log模块等不同层次或者不同类型的模块,还可以原封不动地复用大量已有的HTTP过滤器模块。这种低耦合度的优秀设计,造就了Nginx庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx的高并发特性。

(3) 高可靠性

这个就不谈了

(4) 低内存消耗

一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这 是Nginx支持高并发连接的基础。

(5) 单机支持10万以上的并发连接

这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量并发请求,而Nginx作为一个能够在峰值期顶住10万以上并发请求的Server,你觉得你需不需要学习。

(6) 热部署

master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以 在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。

(7) 最自由的BSD许可协议

这是Nginx可以快速发展的强大动力。BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继 续为Nginx贡献自己的智慧。

既然Nginx这么优秀,我们便来准备一下Nginx的使用环境,然后开始Nginx的探索之旅吧。

首先我们需要一个内核为Linux 2.6及以上版本的操作系统,因为Linux 2.6及以上内核才 支持epoll,而在Linux上使用select或poll来解决事件的多路复用,是无法解决高并发压力问题的。

Linux中我们可以通过命令uname -a来查看我们系统的一些信息,包括内核版本,比如下面显示我使用的的阿里云服务器的内核版本为4.4.0

内核版本如果低于2.6,可以参考下面的链接中的方法进行更新(这里只给出ubuntu的)

如何在 Ubuntu 中升级到最新内核

此外,你还需要安装一些软件

(1) gcc和g++

这是编译Nginx模块源代码的必备工具,直接在命令行中输入gcc -v(gcc --version也行)或者g++ -v你就可以知道自己的系统中有没有安装gcc或者g++了(如下所示,表明已经安装)

深入理解Nginx 阅读笔记(一)_第1张图片

如果没有安装gcc或者g++,那么一般直接

sudo apt-get install build-essential

sudo apt-get install gcc

sudo apt-get install g++

就好了,当然有时候有可能出问题,这时候你们自己解决吧。

(2) PCRE库

这东西如果用不到正则表达式的话是不用装的

安装命令如下:

sudo apt-get install libpcre3 libpcre3-dev 即可

(3)zlib库

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那 么,在编译时就必须把zlib编译进Nginx。

安装命令如下:

sudo apt-get install zlib1g-dev

(4)openssl库

如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP(HTTPS,这个东西阿里和腾讯面试特别问),那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。

安装命令如下:

sudo apt-get install openssl libssl-dev

我们的环境先配置到这里,后面还需要配置磁盘并进行一些linux内核参数的优化,下一篇再讲。

你可能感兴趣的:(深入理解Nginx 阅读笔记(一))