一、nginx基本简述
最新更新:请点击这个里
1、概念:nginx是一个开源且高性能、可靠的HTTP中间件、代理服务。
开源: 直接获取源代码
高性能: 支持海量并发
2、nginx应用场景
静态处理、反向代理、负载均衡、资源缓存、安全防护、访问限制、访问认证
二、nginx优秀特性
1、nginx基于IO多路复用:IO复用解决的是并发性的问题,Socket作为复用。
概念:多个描述符的I/O操作都能在一个线程内并发交替地顺序完成,这就叫I/O多路复用,这里的 "复用"指的是复用同一个线程。
实现方式:select、poll、Epool
特点:IO复用(串行,产生阻塞)、IO复用(多线程, 消耗大)、IO多路复用(主动上报)
1)select缺点
1.能够监视文件描述符的数量存在最大限制
2.线性遍历扫描效率低下
2)epool模型
1.每当FD就绪,采用系统的回调函数之间将fd放入,效率更高。
2.最大连接无限制
2、CPU亲和(affinity)
将CPU核心和Nginx工作进程绑定方式,把每个worker进程固定在一个cpu上执行,减少切换cpu的cache miss,获得更好的性能。
3、传统文件传输, 在实现上其实是比较复杂的, 其具体流程细节如下:
1)调用read函数,文件数据被复制到内核缓冲区2.read函数返回,文件数据从内核缓冲区复制到用户缓冲区
2)write函数调用,将文件数据从用户缓冲区复制到内核与socket相关的缓冲区。
3)数据从socket缓冲区复制到相关协议引擎。
4)传统文件传输数据实际上是经过了四次复制操作。
硬盘—>内核buf—>用户buf—>socket缓冲区(内核)—>协议引擎
也就是说传统的文件传输需要经过多次上下文的切换才能完成拷贝或读取, 效率不高。
4、sendfile文件传输是在内核中操作完成的, 函数直接在两个文件描述符之间传递数据, 从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝, 操作效率很高, 被称之为零拷贝。
1)系统调用sendfile函数通过 DMA 把硬盘数据拷贝到 kernel buffer,
2)数据被 kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer。
3)DMA把数据从kernel buffer直接拷贝给协议栈。 这里没有用户空间和内核空间之间的切换,在内核中直接完成了从一个buffer到另一个buffer的拷贝。
三、nginx的安装
1、nginx各个版本
Mainline version 开发版
Stable version 稳定版
Legacy version 历史版本
2、使用官网rpm包安装最新版本,进入官网:https://nginx.org/,找到下载链接
3、找到rpm包链接
4、找到对应的系统的安装包
5、编辑repo文件
vim /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
6、安装最新版nginx
yum install nginx -y
7、查看版本
[root@master ~]# nginx -v nginx version: nginx/1.21.0