nginx.conf 一共由三部分组成,分别为全局块 、events 块和 http块。在http 块中,又包含http全局块 、多个 server 块。每个 server 块中,可以包含 server 全局块和多个 location 块。在同一配置块中嵌套的配置块 ,各个之间不存在次序关系。
配置文件支持大量可配置的指令,绝大多数指令不是特定属于某一个块的。同一个指令放在不同层级的块中 ,其作用域也不同,一般情况下,高一级块中的指令可以作用于自身所在的块和此块包含 的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用 “就近原则” ,即以较低层级 块中的配置为准。比如,某指令同时出现在 h即全局块中和 server 块中,并且配置不同,则应该以server 块中的配置为准。
在介绍可配置指令之前,我们先来看看各个块的作用。
1. 全局块
全局块是默认配置文件从开始到 events 块之间的一部分内容,主要设置一些影响 Nginx 服务器整 体运行的配置指令 ,因此,这些指令的作用域是 Nginx 服务器全局。
通常包括配置运行 Nginx 服务器的用户 ( 组)、允许生成的worker process 数、Nginx 进程 PIO 存 放路径、日志的存放路径和类型 以及配置文件引人等。
2.events块
events块涉及的指令主要影响 Nginx 服务器与用户的网络连接。常用到的设置包括是否开启对多 worker process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处 理连接请求,每个worker
process 可以同时支持的最大连接数等。
这一部分的指令对 Nginx 服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。
3.http 块
http块是 Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模 块的配置都可以放在这个模块中。
前面已经提到,http块中可以包含自己的全局块,也可以包含 server块 ,server块中又可以进一步 包含 location 块,在本书中我们使用 “http即全局块” 来表示 htφ 中自己的全局块,即 h即块中不包含 在 server 块中的部分。
可以在http全局块中配置的指令包括文件引人 、MIME-Type 定义 、日志自定义、是否使用sendfile传输文件 、连接超时时间、单连接请求数上限等。
4.server 块
server 块和 “虚拟主机” 的概念有密切联系。为了加深对相关配置的理解 ,在介绍server 块之前, 我们简单了解一下虚拟主机的相关内容。
虚拟主机,又称虚拟服务器 、主机空间或是网页空间,它是一种技术。该技术为了节省互联网服务器硬件成本而出现的。这里的 “主机” 或 “空间” 是由实体的服务器延伸而来,硬件系统可以基 于服务器群 ,或者单个服务器等。虚拟主机如位主要应用于HTTP,FTP及EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资獗 。从用户角度来看一台虚拟主机和一台独立的硬件主机是完全一样的。
在使用Nginx以服务器提供 Web 服务时,利用虚拟主机的技术就可以避免为每一个要运行的网站提供单独的Nginx 服务器,也无需为每个网站对应运行一组Nginx 进程。虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组 Nginx 进程 ,就可以运行多个网站。那么,如何对Nginx进行配 置才能达到这种效果呢?本节介绍的 server 块就是用来完成这个功能的。
在前面提到过,每一个http块都可以包含多个 server 块,而每个 server 块就相当于一台虚拟主机, 它内部可有多台主机联合提供服务 ,一起对外提供在逻辑上关系密切的一组服务( 或网站)。我们先来 学习server全局块中常见的指令及其配置。server 全局块指令的作用域为本server块,其不会影响到其 他的 server 块。
注意
在 http 全局块中介绍过的部分指令可以在 server 块中和 location 块中使用 ,其作用域问题也已在 前文中说明,后面就不再赘述。
和HTTP块相同,server块也可以包含自己的全局块 ,同时可以包含多个 location 块。在 server 全局 块中,最常见的两个配置项是本虚拟主机的监昕配置和本虚拟主机的名称或 IP 配置。
5.location 块
每个 server 块中可以包含多个 location 块。从严格意义上说,loc甜on 其实是 server 块的一个指令, 只是由于其在整个 Nginx 配置文档中起着重要的作用,而且 Nginx 服务器在许多功能上的灵活性往往 在 location 指令的配置中体现出来,因此笔者认为应该将其单独列为一个 “块” ,一方面引起读者的重 视,另一方面通过专门的详细介绍突出其重要性,加深读者的理解。
这些 location 块的 主要作用是 ,基于 Nginx 服 务 器 接收到的请求字符串 ( 例如 ,
server_name/uri-string ),对除虚拟主机名称 ( 也可以是 E别名,后文有详细阐述 ) 之外的字符串 ( 前
例中 “luri-string ” 部分 ) 进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能 都是在这部分实现。许多第三方模块的配置也是在 location 块中提供功能。