Nginx入坑基础篇

 

Nginx

是一个开源高性能、可靠的HTTP中间件、代理服务

具体见:https://baike.baidu.com/item/nginx/3817705?fr=aladdin(百度百科)

 

常见的服务

1、HTTPD-Apache
2、IIS-微软
3、GWS-GOOGLE

 

Nginx的中间件架构

 

 

 

特性1

1 、IO多路复用

 

 

多个描述的I/O操作都能在一个线程内并发交替地独立完成
这就叫I/o多路复用
这里地复用值得是复用一个线程

 

2、epoll

IO多路复用地实现方式是selectpollepoll

 

2.1、select

先行遍历
会不断遍历队列里的内容
效率低下

 

 

缺点:
①、能够监视文件描述符地数量存在最大限制
②、线性扫描效率低下

 

2.2、epoll
①、每当fd就绪,采用系统的回调函数之间将fd放入,效率更高
②、最大连接数无限制

nginx采用epoll模型

 

 

特性2

功能模块少
代码模块化

 

特性3

为什么需要cpu的亲和

 

 

是一种把cpu核心和nginx工作进程绑定方式
把每个work进程固定在一个cpu上执行
减少切换cpu的cache miss
获得更好的性能

 

特性4

sendfile
原始
内核-->用户 -->回馈用户

 

 

nginx
内核-->回馈用户

 

 

I/O模型

httpd MPM

prefork:进程模型。两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求

worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程每个线程响应一个请求

event:线程模型,三级结构,主进程master负责生成子进程,每个子进程响应多个请求

 

 

I/O

网路IO:本质是socket读取

磁盘IO:

 

每个IO都需要经过两个阶段:
1、将数据从磁盘文件先加载到内核空间(缓冲区),等待数据准备完成,时间较长

2、将数据从内核缓冲区复制到用于的进程的内存中时间较短

 

画图:

 

 

 

同步异步/阻塞非阻塞/IO模型

同步/异步:关注的是消息通信机制

同步:synchronous,调用者等待被调用者返回消息,才能继续执行

异步:asynchronous,被调用者通过状态、通知或者回调机制主动通知调用者被调用者的运行状态

 

阻塞/非阻塞:关注调用者在等待结果返回之前所处的出状态

 阻塞:blocking,被IO操作需要彻底完成之后才返回到用户空间,调用者结果返回之前,调用者被挂起

非阻塞:nonblockong,指io操作被调用后立即返回非用户一个状态值,无需等到io操作彻底完成

    最终的调用该结果返回之前,调用者不会被挂起

 

I/O模型

 阻塞型、非阻塞型、复用型、信号驱动型、异步

 

同部/异步:关注的是消息通信机制
同部:调用者等待被调用者返回消息,才能继续执行
异步:别调者通过状态、通知或回调机制主动通知调用者被动调用的运行状态
阻塞/非阻塞:关注调用者在等待结果返回之前的所处状态

 

 同部阻塞模型:

同步阻塞IO模型:是最简单的IO模型,用户线程在内核进行IO操作时被阻塞
用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等
到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作
用户需要等待read将数据读取到buffer后,才继续处理接收的数据。整个IO请
求的过程中,用户线程是被阻塞的,这导致用户在发起IO请求时,不能做任何
事情,对CPU的资源利用率不够

 

 

 

 

 同部非阻塞模型

用户线程发起IO请求时立即返回。但并未读取到任何数据,用户线程需要不断
地发起IO请求,直到数据到达后,才真正读取到数据,继续执行。即“轮询”机制
整个IO请求的过程中,虽然用户线程每次发起IO请求后可以立即返回,但是为
了等到数据,仍需要不断地轮询、重复请求,消耗了大量的CPU的资源
是比较浪费CPU的方式,-般很少直接使用这种模型,而是在其他IO模型中使
用非阻塞IO这一特性

 

 

 

 

IO多路复用模型

1、多个连接共用一个等待机制,本模型会阻塞进程,但是进程是阻塞在select或者pol这两
个系统调用上,而不是阻塞在真正的IO操作上


2、用户首先将需要进行I0操作添加到select中,继续执行做其他的工作(异步),同时等
待select系统调用返回。当数据到达时, IO被激活, select函数返回。用户线程正式发起
read请求,读取数据并继续执行。


3、从流程上来看,使用select函数进行I0请求和同步阻塞模型没有太大的区别,甚至还多
了添加监视IO,以及调用select函数的额外操作,效率更差。并且阻塞了两次,但是第
次阻塞在select.上时, select可以监控多个IO.上是否已有IO操作准备就绪1即可达到在
同一个线程内同时处理多个IO请求的目的。而不像阻塞IO那种,一次只能监控一个IO


4、虽然上述方式允许单线程内处理多个IO请求,但是每个IO请求的过程还是阻塞的(在
select函数_上阻塞),平均时间甚至比同步阻塞IO模型还要长。 如果用户线程只是注册
自己需要的IO请求,然后去做自己的事情,等到数据到来时再进行处理 ,则可以提高
CPU的利用率


5、I0多路复用是最常使用的IO模型,但是其异步程度还不够”彻底”, 因它使用了会阻塞
线程的select系统调用。因此IO多路复用只能称为异步阻塞IO模型,而非真正的异步IO

 

IO多路复用是指内核- - 旦发现进程指定的一个或者多个IO条件准备读取,就通知该进程
IO多路复用适用如下场合:
➢当客户端处理多个描述符时( -般是交互式输入和网络套接口) , 必须使用I/O复用
➢当一个客户端同时处理多个套接字时,此情况可能的但很少出现
➢当一个TCP服务器既要处理监听套接字,又要处理已连接套接字, -般也要用到I/O
复用
➢当一个服务器即要处理TCP ,又要处理UDP ,一般要使用I/O复用
➢当一个服务器要处理多个服务或多个协议,一般要使用I/O复用

 

 

信号驱动的io模型

 

 

异步IO模型

 

 

 

 

 五种IO模型

 

 

 

 

 

IO模型的具体实现

◆王要实现万式有以下儿种:
➢Select : Linux实现对应, I/O复用模型, BSD4.2最早实现
➢Poll : Linux实现,对应I/O复用模型, System V unix最早实现
➢Epoll : Linux实现,对应I/O复用模型,具有信号驱动I/O模型的某些特性
➢Kqueue : FreeBSD实现,对应I/O复用模型,具有信号驱动I/O模型某些特性
➢/dev/poll : SUN的Solaris实现,对应I/O复用模型,具有信号驱动I/O模型的某些特性
➢Iocp Windows实现 ,对应第5种(异步I/O )模型.

 

select/poll/epoll

 

 

 

 

 

 

◆poll


➢本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询
每个fd对应的设备状态
➢其没有最大连接数的限制,原因是它是基于链表来存储的
➢大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义
➢polI特点是“水平触发" ], 如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd
➢边缘触发:只通知1次


◆epoll

在Linux 2.6内核中提出的select和poll的增强版本
➢支持水平触发LT和边缘触发ET ,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为就需态,并且只会通知- -次,
➢使用"事件”的就绪通知方式,通过epoll_ ctl注册fd , - -旦该fd就绪,内核就会采用类似callback的回调机制来激活该fd , epoll_ wait便可以收到通知

 

◆优点:
➢没有最大并发连接的限制:能打开的FD的上限远大于1024(1G的内存能监听
约10万个端口)
➢效率提升:非轮询的方式,不会随着FD数目的增加而效率下降;只有活跃可
用的FD才会调用callback函数,即epoll最大的优点就在于它只管理“活跃"
的连接,而跟连接总数无关
➢内存拷贝,利用mmap(Memory Mapping)加速与内核空间的消息传递;即
epoll使用mmap减少复制开销

 

 

 

Nginx

◆Nginx : engineX , 2002年,开源,商业版
◆NGINX是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通
用TCP/UDP代理服务器
◆解决C10K问题( 10K Connections )
◆官网: htp://nginx.org

 

◆特性:
➢模块化设计,较好的扩展性
➢高可靠性
➢支持热部署:不停机更新配置文件,升级版本,更换日志文件
➢低内存消耗: 10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
➢event-driven,aio,mmap , sendfile
◆基本功能 :
➢静态资源的web服务器
➢http协议反向代理服务器
➢pop3/imap4协议反向代理服务器
➢FastCGI(LNMP),uWSGI(python)等协议
➢模块化(非DSO) , 如zip , SSL模块

 

架构

 

 

 

 

Nginx的程序架构

master/worker结构
➢一个master进程: .
负载加载和分析配置文件、管理worker进程、 平滑升级
➢一个或多个worker进程
处理并响应用户请求
➢缓存相关的进程:
cache loader :载入缓存对象
cache manager :管理缓存对象

 

 

模块

◆nginx高度模块化,但其模块早期不支持DSO机制; 1.9.11版本支持动态装载和卸载
◆模块分类:
➢核心模块: core module
➢标准模块:
  ●HTTP模块: ngx. http_*
    HTTP Core modules默认功能
    HTTP Optional modules需编译时指定
  ●Mail模块  ngx_ mail _*
  ●Stream.模块ngx_ stream_*
➢第三方模块

 

◆静态的web资源服务器html ,图片,js , CSs , txt等静态资源
◆结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
◆http/https协议的反向代理
◆imap4/ pop3协议的反向代理
◆tcp/udp协议的请求转发(反向代理)

 

 

安装

yum info nginx

 

 

 

网址、
http://nginx.org/en/linux_packages.html#RHEL-CentOS

 

 

 

[nginx-stable] 
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

进行配置文件的编辑

 

 

 写配置文件

 

 

此时的版本就是最新版

 

 

一般不建议使用最新版
进行删除

 

 

 

利用yum进行安装
首先进行清理
yum clean all

执行yum install nginx
大致经过:

 

 

 

 

查看文件列表
rpm -ql nginx

 

 

 

查看相关命令

 

 

 

命令测试:

1、直接输入nginx

 

 

2、查看端口

 

 

3、直接访问ip地址

 

 

4、停止服务
nginx -s stop

 

 

 

5、备份文件

 

 

 

 

 

 

posted @ 2019-11-26 14:37  MrChengs  阅读(420)  评论(0编辑  收藏  举报