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

相关推荐

  • 选择判断专题脚本编程_第九周练习

    Q1:写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i y=0 declare -i n=0 for i in $(cut…

    Linux干货 2016-12-25
  • mysql mariadb 备份恢复、主从

    备份类型分为: 完全备份、增量备份、差异备份 热备、温备、冷备 逻辑备份、物理备份 每种类型区别: 增量备份:根据上一次备份的增量备份或完全备份备份 差异备份:根据上一次备份的完全 温备:备份过程中只支持读备份备份热备:备份过程中支持读写 冷备:停服务备份 逻辑备份:schema和数据存储在一起,巨大的sql语句、单个巨大的备份文件,恢复备份较慢。优点可以还…

    2017-03-01
  • Linux 第四天: (07月28日) 练习和作业

    Linux 第四天: (07月28日) 练习和作业         定义别名命令baketc, 每天将/etc/目录下所有文件, 备份到/testdir独立的子目录下, 并要求子目录格式为backupYYYY-mm-dd, 备份过程可见 alias baketc='cp -a /etc/ /testdir/b…

    Linux干货 2016-08-08
  • 马哥教育网络班22期+第九周课程练习

    1. 写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash#declare -a loginuserdeclare -i sum_login=0declare -i sum_nologin=0list=($(cat /et…

    Linux干货 2017-01-03
  • 关于 开机启动加密破坏修复 自制linux系统

         开机破坏并且修复之       自制linux系统                CentOS 6启动流程: POST –> Boot Sequence(BIOS) –&…

    系统运维 2016-09-14
  • Linux bash 特性、相关变量以及编程

    Linux bash 特性、相关变量以及编程 bash 特性之:命令hash 缓存此前执行过的命令(都是外部命令,不记录内嵌命令),加速命令的执行 hash    -d 清空指定命令记录   -r 直接清空hash表 bash 特性之一: 变量 程序=指令+数据 指令是有文件提供 数据是由…

    Linux干货 2016-12-29