Nginx 学习笔记

这篇文章主要记录 Nginx 一些学习和笔记。还有遇到的问题。

nginx.conf 文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
... # 全局模块

# events 模块
events {
....
}

# http块
http {
# http 全局块
...
# server 块
server
{
# server 全局块
...
# location 块
location [PATTERN]
{
...
}
}
}

由上面以大括号为分割 Nginx.conf 可分为三大块全局块, events, http。其中 http 模块里面有分为 全局块, server 两个块。server 可以有多个。server 里面又分为 全局location 两个模块。location 也是可以有多个。在 Nginx 使用方面,大多数都体现在配置文件。应用方面也体现在配置了,当然 Nginx 配置是很丰富多样的。

全局模块

全局模块是默认配置文件开始到 events 这一块内容,主要设置一些 Nginx 运行指令,通常包括 Nginx 运行的用户/组,worker proccess 数,Master 进程 PID 存储路径,日志的存放路径以及配置文件的引入等等。

events 模块

events 模块主要是 Nginx 与用户链接的设置。包括设置事件驱动模型和每个 worker proccess 允许的最大链接数目,这部分设置对 Nginx 的性能影响很大,主要体现事件驱动上。

Http 模块

Http 模块是 Nginx 服务的重要部分,代理,缓存和日志等绝大数功能和第三方模块都是放在这个模块中。

Http全局块

Http 全局块中配置的指令包括文件引入,MIME-Type 定义,日志自定义,是否使用 sendfile 传输文件,链接超时时间,但链接请求上限等。

Server 模块

Http 块中可以包含多个 Server 模块,每个 Server 模块对应着一台虚拟机,可以为多台主机提供服务,注意这里是一组逻辑上关系。

Server 全局模块

Server 全局模块提供一些基础功能, 包括虚拟机的监听配置和配置虚拟机的名称或者 IP 地址。

Location 模块

Server 模块的大多数功能都在 Location 中实现,其实整个 Nginx 配置重要的配置都在这块,location 主要对 Nginx 的接收的 uri 进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答等控制功能都是在这部分实现,第三方模块也提供了这块的功能

时序图

用流程图表示可能更加明显,来看一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
graph LR;
Nginx.conf-->id1{全局模块};
Nginx.conf-->id2{Event模块};
Nginx.conf-->id3{Http模块};
id1{全局模块}-->运行用户组;
id1{全局模块}-->workerProccess数目;
id1{全局模块}-->MasterPID存储路径;
id1{全局模块}-->日志存放路径;
id1{全局模块}-->配置文件引入;
id2{Event模块}-->事件驱动模型;
id2{Event模块}-->允许最大链接数目;
id3{Http模块}-->Http全局模块;
Http全局模块-->文件引入;
Http全局模块-->MIME-Type定义;
Http全局模块-->自定义日志;
Http全局模块-->sendfile传输文件;
Http全局模块-->链接超时;
Http全局模块-->链接请求上限;
id3{Http模块}-->Server模块;
Server模块-->Server全局模块;
Server全局模块-->虚拟机的监听;
Server全局模块-->配置虚拟机名称或者IP地址;
Server模块-->Location模块;
Location模块-->请求处理;
Location模块-->地址定向;
Location模块-->数据缓存;
Location模块-->请求应答;
Location模块-->反向代理;