Nginx的基本配置
这篇博客记录一下Nginx的目录结构,Master-Worker多进程模型,和基本配置
一、目录结构
用tree工具查看一下目录结构如下
1 | [root@localhost nginx]# tree |
二、Master-Worker多进程模型
Ngnix采用了Master-Worker模型,Master-Worker模式是常用的并行设计模式。它的核心思想是,系统有两个进程协议工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完后,将结果返回给Master进程,由Master进行归纳和汇总,从而得到系统结果。
Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。worker进程主要处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般会设置与机器cpu核数一致。
我们可以查看一下当前系统中的Ngnix进程,可以看到它的确是有master和worker进程
1 | [root@localhost nginx]# ps -ef | grep nginx |
三、基本配置
打开ngnix.conf配置文件查看当前配置,先只保留最基本的配置
1 | worker_processes 1; |
(1)work_processes
决定了worker的进程数量,一般与CPU的内核数相同
(2)worker_connections
单个进程最大连接数(最大连接数=连接数*进程数)
(3)include
include可以包含外部配置文件,mime.types是文件扩展名与文件类型映射表。浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 Web服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。如果预先定义的类型没匹配上,默认使用二进制流的方式传输
(4)sendfile
sendfile函数在两个文件描述符之间传递数据,从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,被称为零拷贝。打个比方就是两个人之间传输数据并不需要通过U盘拷贝,而是直接传输。
在off的状态下,Nginx 读取本地文件后,在进行网络传输时会先将硬盘文件从硬盘中读取到 Nginx 的文件缓冲区中,操作流程为硬盘 → 内核文件缓冲区 → 应用缓冲区。然后将 Nginx 文件缓冲区的数据写入网络接口,操作流程:应用缓冲区 → 内核网络缓冲区 → 网络接口。
Nginx 的本地文件在进行网络传输的过程中,经历了上述两个操作过程,两次操作都在内核缓冲区中存储了相同的数据。为了提高文件的传输效率,内核提供了零复制技术,该技术支持文件在内核缓冲区内直接交换打开的文件句柄,无须重复复制文件内容到缓冲区,则上述两个操作的流程变为:硬盘 → 内核文件缓冲区 → 内核网络缓冲区 → 网络接口。
(5)serve
serve为虚拟主机配置,虚拟主机是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。我们可以在ngnix中配置多个虚拟主机,管理多个不同的站点。