Nginx 之访问控制详解

举报
兮动人 发表于 2021/08/16 14:19:24 2021/08/16
【摘要】 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、 serverlocation 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 提供两种设置用户和组的方式,一种是在安装时通过编译选项进行设置,另 一种是修改配置文件。需要注意的是,不论哪种方式在配置之前,都需要提前创建好用户和组 。
  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 的进程设计思想如下图所示。它由一个主进程和多个工作进程组成,主进程接收容户端请求,转交给工作进程处理,从而很好地利用多核心 CPU 的计算能力。当管理员执行 reload 命令重新加载自己直时,主进程会等待工作进程完成 工作后再结束工作进程, 然后基于新的配直重新创建工作进程,避免了工作过程中被打断的情况。 由于整个过程中主进程没有停止,因此也不会发生漏掉客户端请求的情况 。
    在这里插入图片描述
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。