关于配置文件的名称和位置

Nginx 的默认配置文件名是 nginx.conf ,如有需要,你可以在 nginx 启动时通过 -c file 参数指定要应用的配置文件。注意,file 如果是相对路径,那就是相对编译安装过程中执行 configure--prefix 指定的路径。

如果想知道 nginx 配置文件的详细位置,可以使用 nginx -t/-T 命令,该命令不仅会检查配置文件的语法是否书写错误,它还会列出它的具体位置,例如:

1
2
3
4
5
➜  ~ sudo nginx -t
Password:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
➜ ~

配置文件的结构 & 基础语法

配置文件 nginx.conf 本质上是一种文本文件,它的文本内容由 简单指令指令块 组成。而 Nginx 的强大功能是由众多的模块(modules)组合在一起提供的,因此,除了 Nginx 的核心功能 需要的指令外,其他指令都是由各个模块定义来服务的,比如 httpserver 指令就是 ngx_http_core_module 模块提供的。对于这些指令的配置要遵循一定的基础语法:

简单指令

  • 简单指令后面跟参数(可以是多个参数),指令与参数之间,参数与参数之间用空格分隔;
  • 每条简单指令以英文 ; 分号结尾;

指令块

  • 指令块使用大括号 {} 包裹;
  • 有的指令块后面可以跟参数,比如 location ,有的则不跟参数,比如 http

配置文件模块化

  • 使用 include 指令可引入其他配置文件;

支持嵌入变量

  • 变量以 $ 开头。

注释

  • 支持 # 形式的单行注释。

其他

  • 不管是简单指令还是指令块,都要按照规则把它放置在正确的上下文中。(下面会讨论到上下文概念)

上下文概念

另外,配置文件中的空白部分被称为 上下文(context)

顶级空白,即不被任何指令块包含的部分,这样的上下文叫做 main,而被指令块包含的空白部分的上下文名称与指令块的名称相同。

比如官方文档的指令说明 Core functionality 中的 events 指令块应该放在 main 上下文中。

1
2
3
Syntax:	events { ... }
Default: —
Context: main