Nginx 简介
什么是 Nginx
- Nginx是一个开源且高性能、可靠的HTTP中间件和代理服务软件。
Nginx 高性能
作为Web服务器,与Apache相比,Nginx能够支持更多的并发连接访问,但占用的资源却更少,效率更高。
为什么Nginx总体性能比Apache高? Nginx 与 Apache同样是基于IO多路复用, 需要了解IO模型
五种 IO Model
1 | # 1、blocking IO 阻塞IO |
- 通常一次IO操作(Network IO read) ,一般会涉及到两个系统对象:
- 一个是调用这个IO的process (or thread)
- 另一个就是系统内核(kernel)。
- 当一个IO操作发生时,该操作会经历两个阶段:等待数据和拷贝数据两个阶段
- 阻塞IO: 在这两个阶段,线程都将被阻塞
- 非阻塞IP: 用户进程其实是需要不断的主动询问kernel数据准备好了没有,等待数据侧不阻塞但是拷贝数据依然阻塞。
- IO多路复用:
- 一个进程可以同时对多个客户请求进行服务
- 复用一个进程(select和epoll)来对多个IO进行服务,在这两个阶段都不会阻塞
- 可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知应用程序进行相应的读写操作。
- IO多路复⽤的实现⽅式有select、poll、Epool
- select 能够监视⽂件描述符的数量存在最⼤限制
- 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
- 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
- select支持的文件描述符数量太小了,默认是1024,所以需要调整配置打开文件最大数等内核参数
- Epool 无须遍历整个被侦听的fd集合
- 给每一个监听对象都绑定一个回调函数
- 数据准备就绪时,调用回调函数,把就绪fd放入就绪链表中
- 总结:select 线性轮询 随着连接数增加,性能减少, epell轮询就绪链表,只有准备好的才执行。
- select 上洗手间 每个孩子都要过问一次
- Epool 想上洗手间的孩子 排好队站在约定好的地方,epoll看有谁来了 就带谁去
CPU亲和(affinity)
1 | 将CPU核心和Nginx工作进程绑定方式,把每个worker进程固定在1个cpu上执行, |
Sendfile 文件传输
- nginx在支持了sendfile系统调用后,避免了内核层与用户层的上线文切换(content swith)工作,大大减少了系统性能的开销。
- 查看系统中上下文切换 vmstat
- 所以当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能,高效传输。
- 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用了,因为 Nginx 是反向代理的时候。
in_fd 就不是文件句柄而是 socket,此时就不符合 sendfile 函数的参数要求了。
1 | sendfile on |
Nginx 的使用场景
1 | 1. 静态处理 |
1 | Nginx作为Web服务器的主要应用场景包括: |
Nginx 与 Apache 特点比较
1 | apache: |
常用的http软件
1 | 1. HTTPD -> Apache基金会 |
Nginx YUM安装
版本选取
Mainline version 开发版
Stable version 稳定版 # 选取长期维护的稳定版
Legacy version 历史版本
启动aliyun主机
1 | 位置 |
yum 安装稳定版本
1 | # 基本组件安装 |
1 | # 配置Nginx官方yum源 |
1 | # 安装 |
1 | # 查看安装的依赖 |
1 | # 查看安装了那些东西 |
1 | # 看配置文件 |
Nginx 安装目录
Nginx 编译参数
1 | [root@Nginx-node1 ~]# nginx -V |
Nginx 常用模块
Nginx 内置变量
1 | 常用: |
1 | # 启动服务 查看日志和记录格式 |
Nginx 状态码
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码
1 | 301—永久移动。被请求的资源已被永久移动位置; |
1 | 301—永久移动。被请求的资源已被永久移动位置; |
Nginx 主配置文件描述
- Nginx主配置文件nginx.conf是一个纯文本类型的文件(其他配置文件大多也是如此),它位于nginx安装目录下的conf目录中,
整个配置文件是以区块的形式组织的。一般,每个区块以一个大括号{}来表示,区块可以分为几个层次。
1 | 1.Main位于 nginx.conf配置文件最高层 |
- Nginx整个配置文件nginx.conf的主体框架为:
Nginx配置文件 基本配置
1 | [root@Nginx-node1 conf.d]# vim /etc/nginx/nginx.conf |
1 | [root@Nginx-node1 conf.d]# vim /etc/nginx/conf.d/default.conf |
部署一个 静态小游戏
- 端口还是使用80 使用hosts文件解析一个域名访问
- 增加一个server虚拟主机
1 | # 上传游戏目录 解压 |
1 | # 新增xiaoniao.conf配置文件 |