网络服务之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

相关推荐

  • 文件元数据信息的含义、查看方法,和文件时间戳信息的修改方法

    文件数据分成两类 元数据,英文叫metadata,是数据的属性; 数据,英文叫data,是数据本身; 使用stat命令查看元数据信息 [0][root@localhost mylinux]# stat /etc/passwd File: ‘/etc/passwd’ Size: 889 Blocks: 8 IO Block: 4096 regular file…

    Linux干货 2018-03-01
  • 运维工具

      运维工具:Operations 通过工具,实现自动化运维 运维工作: BootStraping:当拿到硬件或软件才主机以后,安装操作系统 Bare Metal:pxe, cobbler(pxe的二次开发版) Virtaul Machine:image files(给予模板匹配安装) Configurati…

    Linux干货 2016-11-01
  • 日志收集工具EFK之fluent部署手稿

    Edit EFK fluent部署安装 1. 环境介绍 Centos 6.5 64bit 2. 安装 td-agent介绍 fluent 考虑到灵活可扩展性,使用Ruby编写,部分功能考虑性能使用C语言编写。普通用户安装操作Ruby daemon还是有一定难度的。考虑到flunt的上手难度, fluent专门发布了稳定发布包,就也是所谓的td-agent. …

    Linux干货 2016-03-24
  • 逻辑卷

    §·逻辑卷管理器LVM介绍 ※·LVM逻辑卷的简单描述 lvm(logical volume manager 逻辑卷管理器)的可以弹性的调整文件系统的容量,支持任何块设备,需要使用dm模块:device mapper设备映射,将一个或多个底层设备组织成一个逻辑设备的模块。 lvm的重点在于弹性的调整文件系统的容量,而并非在于数据的存储效率及安全上面…

    Linux干货 2016-08-30
  • 从Linux小白到大牛——与狼共舞的日子10

    马哥教育网络班21期+第10周课程练习 1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) POST –> Boot Sequence(BIOS) –> Boot Loader(MBR)   –> Kernel+ramdi…

    Linux干货 2016-12-05
  • 第二十周作业

    1、用Keepalived实现nginx与lvs的高可用集群; lvs+keepalived: 1)后端两台rs上安装web服务并创建探测页面 ~]# yum install nginx -y ~]# systemctl start nginx.service ~]# vim /usr/share/nginx/html/index.html <h1&g…

    2017-07-03