什么是Nginx

Nginx和它的竞争对手-apache、lighttpd、tomcat、IIS,它们都是Web服务器,或者叫www(world wide web)服务器,具备web服务器的基本功能,基于REST架构风格,以统一资源描述符或者统一资源定位符作为沟通依据,通过Http为浏览器等客户端程序提供各种网络服务。
REST架构风格是基于网络应用的架构风格。目前基于网络应用的架构风格主要有三种:
REST架构风格 将服务器抽象为一组离散资源的集合。资源是一个抽象的概念,而不是代表某个具体的东西。注意:要真正理解REST,就一定要增强自己的抽象思维能力,充分理解到资源是抽象的。资源是名词性的,因此REST建模是以名词为中心的。
RPC架构风格 将服务器看作是由一些过程组成,客户端调用这些过程来执行特定的任务。SOAP就是RPC风格的一种架构。过程是动词性的(做某件事),因此RPC建模是以动词为中心的。

分布式对象架构风格 认为服务器是由一些对象和对象上的方法组成,客户端通过调用这些对象上的方法来执行特定的任务。并且客户端调用这些对象上的方法应该就像是调用本地对象上的方法一样,这样开发就可以完全按照统一的面向对象方法来做。但是很可惜,这样的抽象并不是很有效,因为分布式对象与本地对象存在着巨大的本质差别,想要掩盖这些差别很多时候甚至是有害无益的。

为什么选择Nginx

(1)更快
这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期(如有数以万计的并发请求),Nginx 可以比其他Web 服务器更快地响应请求。
(2)高扩展性
Nginx 的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对某一个模块修复Bug 或进行升级时,可以专注于模块自身,无须在意其他。而且在HTTP 模块中,还设计了HTTP 过滤器模块:一个正常的HTTP 模块在处
理完请求后,会有一串HTTP 过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的HTTP 模块时,不但可以使用诸如HTTP 核心模块、events 模块、log 模块等不同层次或者不同类型的模块,还可以原封不动地复用大量已有的HTTP 过滤器模块。这种低耦合度
的优秀设计,造就了Nginx 庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用。Nginx 的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx 的高并发特性,因此,许多高流量的网站都倾向于开发符合自己业务特性的定制模块。
(3)高可靠性
高可靠性是我们选择Nginx 的最基本条件,因为Nginx 的可靠性是大家有目共睹的,很多家高流量网站都在核心服务器上大规模使用Nginx。Nginx 的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker
进程相对独立,master 进程在1 个worker 进程出错时可以快速“拉起”新的worker 子进程提供服务。
(4)低内存消耗
一般情况下,10 000 个非活跃的HTTP Keep-Alive 连接在Nginx 中仅消耗2.5MB 的内存,这是Nginx 支持高并发连接的基础。
(5)单机支持10 万以上的并发连接
这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量并发请求,一个能够在峰值期顶住10 万以上并发请求的Server,无疑会得到大家的青睐。理论上,Nginx 支持的并发连接上限取决于内存,10 万远未封顶。当然,能够及时地处理更多的并发请求,是与业务特点紧密相关的。
(6)热部署
master 管理进程与worker 工作进程的分离设计,使得Nginx 能够提供热部署功能,即可以在7×24 小时不间断服务的前提下,升级Nginx 的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。
(7)最自由的BSD 许可协议
这是Nginx 可以快速发展的强大动力。BSD 许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx 源码,然后发布。这吸引了无数开发者继续为Nginx 贡献自己的智慧。

选择Nginx 的核心理由还是它能在支持高并发请求的同时保持高效的服务

操作系统要求

内核在Linux2.6及以上版本的操作系统,因为Linux2.6及以上内核才支持epoll,而在Linux上使用Select或者poll来解决事情得多路复用,是无法解决高并发压力问题的。
可以使用以下命令查看

uname -a

tengine和nginx的区别缓存对比_Nginx

使用Nginx需要安装的依赖包

1.gcc编辑器

GCC(GNU Compiler Collection)可用来编译C 语言程序。
我们可以使用最简单的yum 方式安装GCC,例如:
yum install -y gcc
GCC 是必需的编译工具。
如何使用C++ 来编写Nginx HTTP 模块,这时就需要用到G++ 编译器了。G++ 编译器也可以用yum 安装,例如:
yum install -y gcc-c++
Linux 上有许多软件安装方式,yum 只是其中比较方便的一种,其他方式这里不再赘述。

2.PCRE库

PCRE(Perl Compatible Regular Expressions,Perl 兼容正则表达式)是由Philip Hazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。它由RegEx 演化而来,实际上,Perl 正则表达式也是源自于Henry Spencer 写的RegEx。
如果我们在配置文件nginx.conf 里使用了正则表达式,那么在编译Nginx 时就必须把PCRE 库编译进Nginx,因为Nginx 的HTTP 模块要靠它来解析正则表达式。当然,如果你确认不会使用正则表达式,就不必安装它。
其yum 安装方式如下
yum install -y pcre pcre-devel
pcre-devel 是使用PCRE 做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx 所必须使用的。
(3)zlib 库
zlib 库用于对HTTP 包的内容做gzip 格式的压缩,如果我们在nginx.conf 里配置了gzip on,并指定对于某些类型(content-type)的HTTP 响应使用gzip 来进行压缩以减少网络传输量,那么,在编译时就必须把zlib 编译进Nginx。其yum 安装方式如下:
yum install -y zlib zlib-devel
同理,zlib 是直接使用的库,zlib-devel 是二次开发所需要的库。
(4)OpenSSL 开发库
如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL 协议上传输HTTP,那么就需要拥有OpenSSL 了。另外,如果我们想使用MD5、SHA1 等散列函数,那么也需要安装它。其yum 安装方式如下:
yum install -y openssl openssl-devel