Nginx 之访问控制详解
【摘要】 Nginx 之访问控制详解
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 并不会对其进行解析,该注释行的作用仅用于解释和说明。 下面为了便于阅读, 去掉配置文件中所有注释后,默认的配置整体展示如下所示。
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.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 提供两种设置用户和组的方式,一种是在安装时通过编译选项进行设置,另 一种是修改配置文件。需要注意的是,不论哪种方式在配置之前,都需要提前创建好用户和组 。
- 编译安装配置方式
在./configure
编译安装 Nginx 时的选项中,添加如下两个选项。
--user=<user>
--group=<group>
- 在上述选项中, user 用于指定用户名称,group 用于指定用户所在组的名称 。
- 修改配置文件方式
打开 Nginx 的配置文件,找到配置用户和组的指令 user,具体如下 。
user nobody;
- 接下来以用户 nuser 和组 ngroup 为例,修改后的配置如下 。
user nuser ngroup;
- 上述配置中,
nuser
用于指定执行工作进程的用户,ngroup
用于指定 nuser 用户所属的组。 按照上述命令修改完成后,保存nginx.conf
配置文件,平滑重启,如下图所示 。 从查询结果的第 2 行可以看到工作进程用户已成功修改为 nuser。
Nginx 的进程设计思想
- Nginx 的进程设计思想如下图所示。它由一个主进程和多个工作进程组成,主进程接收容户端请求,转交给工作进程处理,从而很好地利用多核心 CPU 的计算能力。当管理员执行
reload
命令重新加载自己直时,主进程会等待工作进程完成 工作后再结束工作进程, 然后基于新的配直重新创建工作进程,避免了工作过程中被打断的情况。 由于整个过程中主进程没有停止,因此也不会发生漏掉客户端请求的情况 。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)