网络服务之Nginx

  在之前一篇博客中我们讲述了httpd网络服务器,那么httpd是个非常稳定安全的一个服务器,这次我们介绍一个新的网络服务器—-nginx。
  Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器(我们主要围绕这两点),同时也是一个 IMAP/POP3/SMTP 代理服务器,还能作为TCP/UDP的反向代理服务器,意味着还能可以完全代理MySQL,Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的。Igor Sysoev 在建立的项目时,使用基于BSD 许可。

1、httpd与nginx

  自从nginx出现之后,就一路飙升,步步蚕食httpd的市场空间,但是在nginx出现之前httpd是非常火的,那么为什么在httpd非常火的时候,nginx就出现的呢?这是因为出现了一个叫C10K的问题,所谓的C10K问题就是10K Connections,我们都知道1K=1000,10K就是10000,也就是说,这是httpd的并发瓶颈,最大也就是支持10000的并发请求量,所以nginx这样一款轻量级的服务器就出来了。
  那么为什么会由这样的结果呢?原因在于处理的模块不同,现在http的2.4版本共有三种模块,分别是:

prefork:进程模型,两级结构,主进程master负责生成与销毁子进程以及接收请求报文,每个子进程worker负责响应一个请求。
worker:线程模型,三级结构,主进程master负责生成与销毁子进程并接收请求报文,而每个子进程worker负责生出多个线程,每个线程处理一个请求。
event:进程模型,两级结构,主进程master生成并销毁子进程以及接收请求,而子进程worker可处理多个请求并与之响应。

  当时的httpd采用就是前两种类型,worker模式线程与进程的等级是差不多,在性能方面上提高不了多少,而event也是近几年才有的模型。

2、Nginx设计架构

  Nginx在两级结构的设计上,一种是master,另一个worker进程,后者可生成多个,master本身不响应用户的请求,只负责生成监控worker进程,以及加载配置文件的管理,平滑升级,负责应用配置文件并应用新配置,用户的请求报文通常是由master来接收。
  worker进程是直接用来处理请求的,每个worker可以处理多个用户请求,worker的生成应小于CPU的核心数,而处理的请求完成IO调用时,利用epoll等多路IO,还包含sendfile机制,mmap内存映射,所以特点是基于事件驱动,异步,非阻塞。
再由master进程将请求报文发送给worker直接处理请求,同时还有缓存相关的进程,一个是cache loader叫做载入缓存对象,另一种是cache manager叫做管理缓存对象。

网络服务之Nginx

3、I/O模型

  无论nginx和httpd都会发起系统调用运行I/O加载资源处理请求完成IO调用时响应客户端,同时还要记录日志,那么如何加载、如何调用?
  I/O模型共分为以下几类:阻塞型、非阻塞型、复用型、信号驱动型、异步
  我们进行一次IO请求都会由两个阶段组成,第一步就是等待数据,就是将数据从磁盘复制到内核内存当中,第二部就是复制数据,即将数据从内核内存当中复制到进程内存中。
  首先我们来说一下关于同步和异步,区分调用者与被调用者的关系。

网络服务之Nginx

3.1、同步、异步调用

  同步和异步关注的就是消息的推送通知机制,同步是程序调用者发起IO调用,IO则就成为了被调用者,那调用者处于等待状态,要等待被调用者调用完成之后,返回一个成功的一个消息,而后调用者才能将程序继续执行下去。
异步就是调用者发起IO调用,IO成为被调用者,只不过就是调用者不会处于等待状态,而调用者可以去执行其它任务,当被调用者调用完成之后,通过状态、通知或回调机制通知调用者被调用者的运行状态。

3.2、阻塞、非阻塞

  阻塞与非阻塞关注的就是调用者在等待结果返回之前所处的状态是什么样的,阻塞状态就是调用结果返回之前,调用者是处于一个挂起状态;而非阻塞就是调用结果返回之前,调用者是不会被挂起的。
(图)

4、Nginx特性

  Nginx作为http服务器来说,有以下几种特性:
  1、它是静态的web资源服务器,处理静态文件(如:可做成图片服务器,或js/css/html/txt等静态资源服务器)。
  2、结合FastCGI/uwSGI/SCGI等协议反代动态资源的请求,能够实现简单的负载和容错。
  3、能够进行http和https协议的反向代理,说明支持SSL和TLSSNI。
  4、支持imap4/pop3协议的反向代理。
  5、支持tcp/udp的转发。
  6、Nginx转为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,支持Poll模型,对高负载来说是没有问题的。
  7、支持热部署
  8、采用master-slave模型,充分利用SMP优势,减少在磁盘上的IO阻塞延迟,当采用select()/poll()调用时,还可以限制每个进程的连接数。

5、Nginx安装配置

  Nginx提供无非就常用的两种方法,一种是RPM,另一种是源码包的安装,其Nginx的官方站点为:nginx.org那么官方的预制包站在http://nginx.org/packages/centos/7/x86_64/RPMS/。
  对于RPM包来说,这个包基本没有什么依赖性,不过要在绝对路径下,因此可以直接使用rpm命令安装也可以,或者使用yum。

# rpm -ivh ./nginx-1.10.2-1.el7.ngx.x86_64.rpm
# yum -y install nginx

  以上就是RPM包安装的方式,还有一种是编译安装,不过我们要先使用yum命令安装开发套件以及nginx所依赖的库和辅助包。

# yum -y groupinstall 'Development Tools'  'system platform server'
# yum -y install openssl-devel pcre-devel

  以上的包安装完成之后,就可以开始编译了

# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
# make && make install

  安装完成之后在客户端打开浏览器输入在地址栏上输入ip:port就可以看到你想要的结果了

原创文章,作者:刘 祥宇,如若转载,请注明出处:http://www.178linux.com/70290

(0)
刘 祥宇刘 祥宇
上一篇 2017-06-07 21:09
下一篇 2017-06-08 15:02

相关推荐

  • Linux计划任务

    计划任务 Linux任务计划、周期性任务执行 • 未来的某时间点执行一次任务:     at     batch:系统自行选择空闲时间去执行此处指定的任务 • 周期性运行某任务:      cron at任务 …

    Linux干货 2016-09-10
  • 什么是CA??

       数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。 介绍     CA中心为每个使用公开密钥的用户发放一个…

    Linux干货 2017-07-17
  • MBR&GPT分区基本原理

    1、磁盘系统为什么要分区?     •     优化I/O性能     •     实现磁盘空间配额限制       &…

    Linux干货 2016-08-30
  • 二维码的生成细节和原理

    二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。 关于QR Code…

    Linux干货 2016-08-15
  • Linux程序包管理之RPM

    Linux程序包管理之RPM RPM概念 rpm是什么 RPM 是Ret Hat Package Manager(RPM软件包管理器)的缩写,遵循GPL协议,可以运行在各种Linux上,公认的行业标准。 rpm干什么 对于终端用户来说 简化了Linux系统的安装、卸装、更新和升级的过程,用命令完成 对于开发者来说 RPM允许把软件编码包装成源代码和程序包提供…

    Linux干货 2016-11-22
  • Linux系统

    1、计算机的组成及其功能 从基本结构上来讲,电脑可以分为五大部分:运算器、存储器、控制器、输入和输出设备。 运算器(Datapath):对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 存储器(Memory):存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。 控制器(Control):整个计算机的中枢神经,对程序规定的控制信息进行解释,…

    Linux干货 2016-10-30