1. 初始配置
在前面搭建好 Nginx 环境后,编译的 Nginx 根路径为 /root/nginx,那么对应的配置文件为 /root/nginx/conf/nginx.conf ,直接用 cat 命令查看这里的配置文件内容(删除掉了原配置文件中的英文注释,并对主要配置项增加中文注释):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
案例 1
修改 worker_processes 指令的参数,比如改为 2,再启动 Nginx,观察 Nginx 的进程,相比原来为 1 时的变化?
Nginx 默认会启动一个 Master 进程(也可以无 Master 启动),可以把 Master 可以看做是包工头,主要的工作就是招募工人(生成 Worker 进程)并监督他们干活。worker_processes 指令用于控制 Worker 进程的数目,也就是所谓的工人数。我们用ps
可以看到,当 worker_processes 指令参数为 2 时,worker 进程会变成 2 个。通常情况下,我们会把 worker 进程数会设置成系统的 cpu 核数(这里要看大家的机器配置而定),这样 worker 进程会分配到各个 cpu 核心上去执行请求处理,真正做到并行处理。
案例 2
我们请求在页面上请求 80 端口,会出现 Nginx 的默认页面,也就是 html 目录下的那个 index.html 页面;另外直接访问http://localhost/50x.html
时候,会出现针对状态码为 50x 异常页面。接下来,我们添加一个简单的请求访问接口,模拟 500 异常,然后会将请求重定向到这个异常页面。
在上述默认配置的 server 块中,我们添加一个新的匹配路径,如下:
- 1
- 2
- 3
return 指令一般用于对请求的客户端直接返回响应状态码。在该作用域内 return 指令之后的所有 Nginx 配置都是无效的。
可以使用在 server、location 以及 if 配置中。 除了支持跟状态码,还可以跟字符串或者 url 链接,比如写成这样的形式:
- 1
这样,使用 -s reload 热加载 Nginx 后,我们直接在浏览器中敲 http://ip/internal_error
, 就可以看到50x的异常页面了。
2. 基本语法
接下来,我将会介绍 Nginx 配置文件的通用语法,想深入学习一些指令的用法,可以多多上官网进行查阅。
2.1 配置文件有指令和指令块构成
例如前面的默认 Nginx.conf 示例中,下面一行就是一个指令:
- 1
而使用花括号包围起来的就是一个指令块,比如 http 指令块:
- 1
- 2
- 3
- 4
对于具体指令的参数、含义以及指令可以放入的指令块等信息都可以在官方查到;
2.2 每个指令块以分号(;)结尾
这个在默认的 Nginx.conf 中都有体现,如果是没有分号结尾启动 Nginx 或者执行 -t 检查时会报错;
2.3 include 语句允许组合多个配置文件以提升可维护性
这个比较常用,因为在大型网站中使用 Nginx 监听的端口比较多,同时也会存在各种复杂的请求处理,如果都写在同一个 Nginx.conf中,会使得 Nginx 的配置文件变得异常复杂,难以维护。
此时,比较好的方法是使用 include,对配置文件进行按功能,或者按端口等任意的方式进行划分,将对应的处理指令写到另一个文件中,而主配置文件只要使用 include 指令包含该文件或者该文件所在的目录即可,比如如下的写法也是可以的:
- 1
2.4 使用 # 符号添加注释
使用 # 符号给配置文件添加注释可以提高配置文件的可读性, 这个和代码添加注释是一个道理。
2.5 使用 $ 符号使用变量
Nginx 有内置变量和自定义变量两种。内置变量往往代表着客户端请求头的内容,如 $http_user_agent , $http_cookie 等。Nginx 支持的常用内置变量有:
2.6 案例:体验 Nginx 的 include 指令和内置变量
我们准备三个配置文件,分别为主配置文件 Nginx.conf 和次配置文件 8080.conf、8088.conf,在 Nginx 根目录下的 conf 目录中,新建 conf.d 目录,然后将 8080.conf、8088.conf 两个文件放到此处。通过cat
命令查看三个配置文件内容,如下:
$ cat 8080.conf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
$ cat 8088.conf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
$ cat nginx.conf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
准备好这三个三个配置文件后,直接启动 Nginx,可以发现 Nginx 服务分别监听了 80、8080 和 8088 端口。这说明 include 指令生效了,8080.conf、8088.conf 配置被包含进来了。
当然我们也可以去掉这个 include 指令再看看 Nginx 会不会监听 8080 和 8088 端口,来个终极确认。最后我们在服务器上使用 curl 命令来模拟 Http 请求访问服务器的 8080 和 8088 端口,看是否会有对应的相应文本输出。最后请求 80 端口,带上相应的参数,具体操作以及打印结果如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
3. 小结
今天我们简单了解了下 Nginx 的配置文件以及相应的语法规则。但是我们仅仅简单介绍了 Nginx 一些简单的语法并完成了几个简单的案例,接下来我们将简单学习 Nginx 的 Http 配置以及反向代理等常用配置。