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

相关推荐

  • N25第五周 grep 和find 命令使用示例

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;    [root@localhost grub]# grep "^[[:space:]]\+.*" grub.conf    root (hd0,0)…

    Linux干货 2016-12-25
  • 初学第一篇

    本菜鸡出现了。。。 第一次接触Linux,相对老司机要差远了,这几个月的辣眼睛,我就承包了,希望越来越好~~~ ————我是分割线,下面是正文————- 都是讲过的东西,不过里面内容都是11手打,作业也自己做后再比对答案 一、–第一天的课程暂时不写了,…

    Linux干货 2017-09-02
  • Linux系统基础命令

    Linux下一些基本常用命令:   1、Lscpu:显示CPU架构详细信息; [root@centos6 ~]#lscpu 2、Cat:查看合并文件到标准输出; [root@centos6 ~]#cat file    Tac:显示的文本与cat显示的文本相反; 3、Who:显示都有那些用户登录到了系统; [root@…

    Linux干货 2016-07-26
  • 命令行历史和调用命令参数

    history显示当前终端的历史记录 !! 重复执行上一条命令 !-n 重复执行倒数第n条命令 !n 重复执行第n条命令 ctrl+p 等于向上方向键,翻出上一条命令。 ctrl+n 等于向下方向键,翻出下一条命令。 ctrl+j 等于enter 执行当前命令 !:0 执行前一条命令(去除参数) !string 重复前一个以“string”开头的命令(只限于…

    2017-07-14
  • 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    BSD开源协议(original BSD license、FreeBSD license、Original BSD license) BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码…

    Linux干货 2017-01-30
  • 文件搜索者-find命令详解

    1. 文件查找:          在linux系统中由于文件的众多,往往需要在众多的文件当中查找某一个文件,如果时间一长,很难记得文件存放至何处,不过,这一点,你不比担心,因为开发人员为我们提供了强大的文件搜索工具,下面将介绍两款常用的文件查找工具locate,和find,这两…

    Linux干货 2016-08-15