网络服务之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
下一篇 2017-06-08

相关推荐

  • linux文件系统创建

    件系统管理 格式化:低级格式化(分区之前,划分磁道)         高级格式化:在分区之后进行,创建文件系统         元数据(也是放在块上(block)):inode  &nbsp…

    Linux干货 2016-08-29
  • 第六周作业补充-vim简介及其使用方法详细介绍

    What       Vim是由Vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在Unix& Unix Like操作系统中被广泛使用。和Emacs并列成为Unix& Unix Like操作系统中最受欢迎的文本编辑器 When& Who  &nb…

    Linux干货 2016-09-26
  • redis + keepalived 双主模型

    redis + keepalived 双主模型 架构图:    1.vip默认绑定在redis主上,由redis主提供服务,redis从为备用节点。(实际上提供服务的只是vip) 2.当redis主挂掉,vip会默认漂移至redis从。由redis从提供服务,redis主已经挂掉。 3.当redis主已经恢复,redis从继续提供服务和挂…

    Linux干货 2016-06-23
  • Linux的发展史

    前言: Linux是什么?    我们知道Linux这玩意儿是在计算机上面运作的,所以说Linux就是一组软件。问题是这个软件是操作系统还是应用程序? 且Linux可以在哪些种类的计算机上面运作?而Linux源自哪里?为什么Linux 还不用钱?这些我们都得来谈一谈先!      计算机系…

    Linux干货 2016-10-13
  • 初识Linux

    本文对计算机组成及其功能、Linux的发行版、以及Linux的哲学思想进行了简单的介绍;同时对Linux系统中常用的基础命令以及如何获取帮助信息进行了详细的说明。

    2018-01-14
  • n25_第一周作业

    1.描述计算机的组成及其功能。 主要分为五个部分: 1. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 2. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 3. 存储器(Memo…

    Linux干货 2016-12-01