Nginx 首先一定要了解其配置文件的基本结构、常用指令的含义以及其使用方法,原因在于 Nginx 所有功能的实现,都是通过配置文件的设置来完成的,例如,虚拟主机、 反向代理、负载均衡等的实现。



文章目录


1.1 认识配置文件

  • Nginx 服务器安装完成后,默认安装时自带的配置文件全部存储在 ​conf​ 目录下,​并且为了备份还原,每个配置文件都提供了一个以 .default 结尾的备份文件。​ 其中, ​​nginx.conf​​ 是 Nginx 默认的主配置文件,所有功能的实现都与此文件的配置相关。 下面对该文件的结 构以及默认设置指令的含义进行详细介绍 。

1. 1.1 配置文件结构

  • 打开 nginx. conf 配置文件,从整体结构可以看出,该配置文件主要由以下几部分组成。
main
events {...)
http {
server {
location{..}
}
}
  • 从上面的结构可以看出, Nginx 的默认主配置文件主要由 ​​main、 events、 http、 server​​​ 和 ​​location​​​ 5 个块组成 ,关于各个块的作用,如下表所示 。 并且对于嵌套块(如 ​​http、 server、 location​​)中的指令,​执行的顺序为从外到内依次执行​,​内层块中的大部分指令会自动 获取外层块指令的值作为默认值,只有某些特殊指令除外。

Nginx 基本配置文件_Nginx 基本配置文件

  • 在介绍 Nginx 配置文件的基本结构以及各个组成部分的含义后,接下来详细了解一下 默认配置指令的具体含义。需要注意的是,在默认的配置文件中,有很多以​​#​​开始的注释 行,Nginx 并不会对其进行解析,​该注释行的作用仅用于解释和说明。​ 下面为了便于阅读, 去掉配置文件中所有注释后,默认的配置整体展示如下所示。
worker processes 1;
events {
worker connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive timeout 65;
server{
listen 80;
server_name localhost;
location /{
roothtml;
index index.html index.htm;
}
error page 500 502 503 504 /50x.html;
location=/50x.html {
root html;
}
}
}

  • 从上述配置可以看出, Nginx 的指令由指令名称和参数组成 。 例如,第 1 行 ​​worker_ processes​​​ 指令的参数为 ​​1​​​ ,第 3 行 ​​worker_connections​​​ 指令的参数为 ​​1024​​​ 等。当一个指令中含有多个子指令作为参数时,需要使用大括号​​{}​​​进行包裹,如 2~4 行配置,且每条指令 都以分号“ ​​;​​”结尾。
  • 关于上述 Nginx 默认配置文件中指令的含义,详见下表所示。其中,在该配置中引人 的文件路径,可以是相对路径,也可以是绝对路径。 相对路径的设置如上述第 6 行的配置,表示引人的 ​​mime.types​​​ 文件是相对于当前配置 文件 ​​nginx.conf​​​ 所在的目录 ​​/usr/local/nginx/conf​​​。绝对路径的设置就是以 ​​Linux​​​ 的根目录“​​/​​​”开始的文件路径 。 例如,可以将 ​​mime.types​​ 文件的引人路径写成如下形式。

include /usr/local/nginx/conf/mime.types;

  • 在上述配置中,​​mime.types​​ 文件的作用是存储文件扩展名与文件类型的映射表 。
    Nginx 基本配置文件_Nginx设置用户和组_02
  • 以上就是 ​​nginx.conf​​ 配置文件中默认指令的相关说明。

1.1.2 设置用户和组


  • 在讲解如何配置 Nginx 用户和组之前,先了解一下 Nginx 中用户和组的作用 。
  • Nginx 服务是由一个主进程( ​​master process​​​) 和多个工作进程( ​​worker process​​​)组成 的 。其中,主进程以 ​​root​​​ 权限运行,而工作进程在默认情况下以 ​​nobody​​​ 用户运行。原因在 于 ​​nobody​​​ 用户是一个不能登录的账号,有一个专用的 ​​ID​​​,可将每个运行的工作进程隔离出 来,这样即使黑客破坏了服务器程序,因其不是 ​​root​​ 用户,也不会影响其他数据。
  • 因此,为工作进程设置的执行用户权限越低,则服务器安全系数越高 。
  • 接下来,通过 ​​ps​​​ 命令查看当前启动的 Nginx 服务器中主进程​​( master process)​​​和工作 进程​​(worker process)​​的用户权限,具体命令如下 。

ps aux | grep nginx

  • 执行上述命令后,运行结果如下图所示 。 从图中可以看出 ​​Nginx​​​ 默认有一个主进程 ​​(master process)​​​和一个工作进程​​(worker process)​​,以及用户和组的分配情况。
  • Nginx 提供配置用户和组的功能,针对的就是工作进程​​( worker process)​​,主要用于对 某些操作提供权限 。 例如,配置日志文件时,主进程创建日志文件后,会以工作进程的用户作为文件所有者,从而使工作进程能够将日志写入指定文件中 。
  • Nginx 提供两种设置用户和组的方式​,一种是在安装时通过编译选项进行设置,另 一种是修改配置文件。需要注意的是,​不论哪种方式在配置之前,都需要提前创建好用户和组 。

  1. 编译安装配置方式
    在 ​​​./configure​​ 编译安装 Nginx 时的选项中,添加如下两个选项。
--user=<user>
--group=<group>
  • 在上述选项中, user 用于指定用户名称,group 用于指定用户所在组的名称 。
  1. 修改配置文件方式
    打开 Nginx 的配置文件,找到配置用户和组的指令 user,具体如下 。
user nobody;
  • 接下来以用户 nuser 和组 ngroup 为例,修改后的配置如下 。
user nuser ngroup;
  • 上述配置中, ​​nuser​​​ 用于指定执行工作进程的用户, ​​ngroup​​​ 用于指定 nuser 用户所属的组。 按照上述命令修改完成后,保存 ​​nginx.conf​​ 配置文件,平滑重启,如下图所示 。 从查询结果的第 2 行可以看到工作进程用户已成功修改为 nuser。

Nginx 基本配置文件_nginx_03

Nginx 的进程设计思想

  • Nginx 的进程设计思想如下图所示。它由​一个主进程和多个工作进程组成​,主进程接收容户端请求,转交给工作进程处理,从而很好地利用多核心 CPU 的计算能力。当管理员执行 ​​reload​​​ 命令重新加载自己直时,主进程会等待工作进程完成 工作后再结束工作进程, 然后基于新的配直重新创建工作进程,避免了工作过程中被打断的情况。 由于整个过程中主进程没有停止,因此也不会发生漏掉客户端请求的情况 。
    Nginx 基本配置文件_Nginx设置用户和组_04