文章目录
- 前言
- 1. 学习目标
- 2. Nginx的目录结构
- 3. nginx指令与指令块介绍
- 3.1 全局模块指令详解
- 3.1.1 user指令
- 3.1.2 master_process 与worker_process
- 3.1.3 error_log 指令
- 3.1.4 pid 指令
- 3.1.5 include 指令
- 3.2 event模块指令详解
- 3.2.1 accept_mutex指令
- 3.2.2 multi_accept指令
- 3.2.3 use 指令
- 总结
前言
在上一篇文章中我们完成了Nginx的入门安装,深入学习Nginx之前需要我们好好了解其安装目录的基本结构以及常用的配置文件,因为通过这些配置文件我们才能使用反向代理、负载均衡等功能。
1. 学习目标
- 了解Nginx的目录结构
- 掌握nginx.conf相关配置指令。
2. Nginx的目录结构
首先安装 tree命令,这个命令可以将我们目录以文件树的结构进行展开:
yum install -y tree
然后我们输入如下命令:
tree /usr/local/nginx/
主要配置文件说明
名称 | 说明 |
conf | 配置文件目录(.default 文件为对应的默认文件) |
mime.types | 静态文件的MIME类型,nginx会根据不同的文件类型设置不同的Response 的 Content-Type |
nginx.conf | Nginx主配置文件 |
html | Nginx静态资源html目录 |
50x.html | Nginx访问错误显示的页面 |
index.html | Nginx访问首页显示的页面 |
logs | Nginx访问的日志目录 |
access.log | Nginx请求的日志文件 |
error.log | Nginx请求的错误日志文件 |
nginx.pid | Nginx运行后的进程号 |
sbin | Nginx可执行的文件目录 |
nginx | Nginx启动文件 |
3. nginx指令与指令块介绍
下面是一个去除了注释的nginx.conf文件内容,下面我们将揭开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 / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 404 /50x.html;
location = /50x.html {
root html;
}
}
上面的配置中包含两种类型的指令:
- 简单指令
由名称和参数组成,以空格分隔,以分号结尾,如下面属性名:worker_processes
红色框包裹地方。
- 指令块
就是由名称和大括号{}组成,指令块可以包含指令块与简单指令。
上面配置中,http块全局参数,对整体产生影响;server块是虚拟主机,主要对指定的主机和端口号进行配置,而location块是虚拟主机根据请求的URI进行访问请求匹配。
3.1 全局模块指令详解
指令 | 说明 |
user | 定义运行nginx的用户及用户组 |
master_process | 定义是否启动nginx的worker进程 |
worker_process | 定义是否启动nginx的worker进程 |
error_log | 定义nginx运行日志的类型以及保存路径 |
pid | 定义nginx运行的pid文件保存路径 |
3.1.1 user指令
指定nginx工作进程所属用户以及用户组,例如将其分配给test用户及用户组。
## 验证nginx配置是否有效
[root@VM-0-10-centos ~]# /usr/local/nginx/sbin/nginx -t
新建test用户后在重新测试配置:
这次在重新启动nginx后一切正常。
3.1.2 master_process 与worker_process
master_process
**on/off **用来开启和关闭worker进程
需要注意的是 master_process 指令在reload
worker_process 设置为2.
需要注意此指令生效前提是开启了worker进程才可生效,同时如 master_process 一样,reload 命令并不会立刻生效,需要重新停止nginx应用进程在启动才可生效.
3.1.3 error_log 指令
error_log 指令可以设置日志存放的路径
设置完成后重新加载nginx服务使配置生效
在nginx随便访问一个不存在的路径,监听错误日志发现错误信息如下所示:
3.1.4 pid 指令
pid可以定义nginx运行的进程文件路径,这个文件记录了nginx运行的进程号
查看进程文件记录的进程号如下所示:
3.1.5 include 指令
include 用来指定主配置文件包含的其他扩展配置文件,扩展文件的内容需要符合Nginx的格式规范,可以使用 nginx -t
3.2 event模块指令详解
指令 | 说明 |
worker_connection | 定义单个nginx进程最大客户端连接次数 |
accept_mutex | 开启则避免惊群效应 |
multi_accept | 是否允许一个进程可以拥有多个网络连接 |
use | 采用系统何种函数以提高IO性能 |
3.2.1 accept_mutex指令
accept_mutex 指令可使多个woker进程将以串行方式接入新连接,开启为 on
开启后可以避免惊群效应,何为惊群效应?打个比方:你养了三条狗,现在你有一个骨头,如果你将骨头直接扔在它们面前,那么三条狗会同时抢这一个骨头,但最终只能其中一只狗才能抢到骨头,其他的狗只能铩羽而归。这个就相当于accept_mutex为off
的效果,但这个时候你主动将这个骨头塞到其中一条狗嘴里,那么其他狗并不会去抢夺这跟骨头,这个就相当于accept_mutex为on
的效果。为了避免惊群效应(惊群效应会造成进程上下文切换过多而造成更多的资源浪费),如果在访问量较小的情况下可以默认打开,但如果访问量比较大建议还是关闭。
3.2.2 multi_accept指令
multi_accept 允许接收多个网络连接,即一个worker进程可以接受更多的网络连接,开启可提高nginx访问吞吐量。
3.2.3 use 指令
epoll 是Linux下多路复用IO接口select/poll的增强版本,它可以大大增强IO吞吐量,使用use epoll
可以直接让nginx直接使用linux内核提供的这个函数,提供Nginx的IO吞吐量。
总结
只有熟悉nginx目录及相关配置指令后加上一些nginx内置的变量,才为后面我们学习虚拟主机的配置打下坚实的基础。