Nginx 了解一下?

这篇文章主要简单的介绍下 Nginx 的相关知识,主要包括如下几部份内容:css

  1. Nginx 适用于哪些场景?
  2. 为何会出现 Nginx?
  3. Nginx 优势
  4. Nginx 的编译与配置

Nginx 适用于哪些场景?

Nginx 适用场景

如图所示,一个请求会先通过 Nginx 到达应用服务层,而后再去访问数据层(好比 Redis、MySQL 等),提供基本的数据功能。咱们的应用服务由于要求开发效率是很是高的,因此它的运行效率是很低的,它的 qps、tps或者并发都是受限的,因此咱们须要把不少这样的应用服务组成集群,向用户提供高可用服务。而一旦不少服务构成集群的时候,咱们须要 Nginx 具有反向代理功能,能够把动态请求传递给应用服务。nginx

而当应用服务构成集群,必定会带来两个需求:web

  1. 须要动态的扩容
  2. 有些服务出现问题的时候咱们须要作容灾

这样反向代理必须具有负载均衡功能。数据库

其次在这样的一个链路中, Nginx 是处在企业内网的一个边缘节点,随着网络链路的增加,用户体验到的时延会增长,因此须要把用户看起来不变的或者在一段时间内看起来不变的动态内容缓存在 Nginx 部分,由 Nginx 直接向用户提供访问,这样用户时延就会减小不少。因此反向代理延伸出另一个功能就是缓存,来减小用户访问的时延。segmentfault

像不少 css、js、img 静态资源,是没有必要经过应用服务来访问的,只须要本地文件系统上放置的静态资源,直接由 Nginx 提供访问就能够了。这是 Nginx 的静态资源服务。api

应用服务自己的性能存在不少问题,像数据库服务比应用服务好的多,由于业务场景比较简单,并发性能和tps都要远高于应用服务,因此延伸出第三个应用场景:由 Nginx 直接去访问数据库、Redis,利用 Nginx 强大的并发性能实现如 web防火墙 复杂的一些业务功能。这就须要api服务有很强的业务处理功能,因此像 OpenResty、 Nginx 集成的 JavaScript,应用 JavaScript、lua 这样的语言功能和它们语言自带的一些工具库来提供完整的 API服务。缓存

为何会出现 Nginx?

伴随着互联网的快速普及、以及全球化和物联网的快速发展,致使互联网的数据量快速增加。服务器

CPU 核数从当初的单核发展到 16 核,甚至 32 核,可是因为操做系统和大量的软件没有作好服务于多核架构的准备,导致服务的性能一般不会有成倍的提高。网络

Apache 的架构模型一个进程同一时间只会处理一个连接一个请求,处理完之后才会处理下一个请求。它实际上在使用操做系统的进程间切换的特性,由于操做系统微观上只有有限的 CPU,可是操做系统被设计为同时服务数百甚至上千的进程,而 Apache 一个进程只能服务于一个连接,这样的模式会致使当 Apache 须要面对几十万、几百万连接的时候,它没有办法去开几十万、几百万的进程;而进程间切换的代价成本又过高了,当并发的链接数越多,这种无谓的进程间切换引起的性能消耗也就越大,而 Nginx 是专门为了这样的应用场景而生的,Nginx 能够处理数百万甚至上千万的并发连接。架构

Nginx 优势

1、高并发,高性能

只要咱们对每一个连接使用的内存足够少就能实现高并发;既要达到高并发又要达到高性能,每每须要很好的设计。

好比如今的主流云服务器,nginx 在 32 核 64G 的配置中能够轻松达到数千万的并发连接;若是是处理简单的静态资源请求,nginx 能够达到 100w 的 RPS 。

RPS(Requests Per Second)为每秒能处理的请求数目,等效于 QPS(Queries Per Second),也就是每秒能处理查询数目。是一台服务器每秒可以相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

2、可扩展性好

可扩展性主要体如今模块化设计;模块化设计很是稳定,使得 Nginx 的生态圈、第三方模块很是丰富。甚至于有 Tengine、OpenResty 这样的第三方插件在他的基础之上又生成了新的生态圈。丰富的生态圈和第三方模块为 Nginx 的丰富功能提供了保证。

3、高可靠性

高可靠性指的是 Nginx 能够服务器上持续不间断的运行数年,而不少web服务器每每运行几周or几个月,就须要进行一次重启。对于 Nginx 这样一个高并发、高性能的反向代理服务器而言,每每运行在企业内网的边缘节点上,这个时候若是咱们企业想提供4个九、5个九、甚至更高的高可用性时,对于 Nginx 持续运行可以宕机的时间一年可能只能以秒来计,因此在这样一个角色中,Nginx 的高可靠性给咱们提供了很是好的保证。

4、热部署

热部署是指在不中止服务的状况下升级Nginx。这个功能对于 Nginx 来讲很是重要,由于在服务器上跑了数百万的并发连接,若是是普通的服务器,咱们只能 kill 掉进程再重启的方式进行升级操做。可是对于 Nginx 而言,由于直接 kill 掉 nginx 进程会给全部的已经创建连接的客户端一个很很差的体验。

5、BSD 许可证

BSD许可证是指 Nginx 不仅是开源的、免费的,并且咱们能够在有定制需求的场景下,去修改 Nginx 的源码,再运行在咱们的商业场景下且属于合法的。

Nginx 组成

Nginx 主要由如下 4 部分组成:

  • Nginx 二进制可执行文件:由各模块源码编译出的一个文件
  • Nginx.conf 配置文件:控制 Nginx 行为
  • access.log 访问日志:记录每一条 http 请求信息
  • error.log 错误日志:定位问题

接下来,咱们就要动手去编译 Nginx 了。

编译 Nginx

# 下载
wget http://nginx.org/download/nginx-1.14.0.tar.gz
# 解压
tar -xzvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
# 配置
./configure --prefix=/usr/local/nginx
# 编译
make
# 安装
make install

在 configure 过程当中可能遇到的问题:

./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre= option.

./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib= option.

出错的缘由是 Nginx 模块须要依赖一些 lib 库,解决办法以下:

安装 pcre-devel 和 zlib-devel 依赖库:yum -y install pcre-devel zlib-devel

Nginx 配置

Nginx 配置语法

Nginx配置语法

Nginx 配置参数

配置参数:时间的单位

时间的单位

配置参数:空间的单位

空间的单位

http 配置的指令块

http配置的指令块

  • http:表示里面全部的指令都是由 http 模块去解析去执行的
  • server:解析对应的域名or一组域名
  • location:url 表达式
  • upstream:表示上游服务,须要与企业内网服务直连的时候,能够定义一个 upstream

示例

示例

示例中的全部指令都是由 Nginx 中的 http 模块去执行的,其中 server 127.0.0.1:8000 为须要解析的域名,location 后面跟的为对应的匹配规则,expires 3m表示 3 分钟后 cache 刷新,zone=one:10m表示开辟了一个 10m 大小的共享内存空间,给不一样的 worker 去使用。

总结

这篇文章主要介绍了 Nginx 出现的缘由和使用场景,并分析 Nginx 的优势,最后动手去编译属于本身的 Nginx,并进行简单配置。

相关文章
相关标签/搜索