配置文件语法
配置文件一般是一个文本文件,可以由程序解析,通过为一组指令指定值便定义了程序的行为,配置nginx只需要掌握一些机制:指令、区段(block)和整体逻辑结构,实际配置过程中,大多为指令填写值。
配置指令
nginx的配置文件实际是一个具有一定逻辑结构的一组指令列表,修改指令值即可控制应用程序。
nginx的配置文件默认安装在/usr/local/nginx/conf/nginx.conf
,查看nginx.conf
文件:
# more /usr/local/nginx/conf/nginx.conf |
前两行配置如下:
#user nobody;
worker_processes 1;
使用字符”#”注释掉了第一行,第二行声明了一条指令,worker_processes
是一个键,它对应的值设置为1,以";"
结尾,这条指令指定了nginx作为单个工作进程工作。
每个指令都有不同的语法,例如指令worker_processes
只接受一个数值,指令user
需要指定两个字符串值:用户账户(nginx的woker进程使用该账户运行)和用户组。
nginx通过模块的方法构建而成,每一个模块都提供一组指令,最根本的指令是nginx核心模块部分。
组织和包含
在配置文件中有如下的指令:
include mime.types;
该指令用来执行对一个特定文件的包含,即在配置文件的内容中,将被插入的文件通过include
指令插入到确切的位置上,实际例子如下:
nginx.conf文件内容:
user nginx nginx;
worker_processes 4;
include other_settings.conf;
other_settings.conf文件内容如下:
error_log logs/error.log;
pid logs/nginx.pid;
nginx解释配置文件的最终结果如下:
user nginx nginx;
worker_processes 4;
error_log logs/error.log;
pid logs/nginx.pid;
在nginx最初的配置文件中使用了两个文件nginx.conf和mime.types( include mime.types;),对于高级配置而言,至少需要5个文件:
标准名称 | 描述 |
---|---|
nginx.conf | 应用程序的基本配置文件 |
mime.types | 文件扩展列表文件,它们与MIME类型关联 |
fastcgi.conf | 与FastCGI相关的配置文件 |
proxy.conf | 与Proxy相关的配置文件 |
sites.conf | 配置nginx提供的网站,也包括众所周知的虚拟主机,推荐一个域建立一个单独的文件 |
以上文件名是依据惯例定义的,实际上完全可以使用其他文件名。
include指令支持文件名替换,例如:
include sites/*.conf
这将包含sites目录下的所有.conf文件,这种机制允许你为自己的网站建立单独的配置文件,然后再将它们全部包含进来。
指令块
指令由模块提供,如果激活了一个模块,那么该模块对应的指令也同时生效,如下:
events {
worker_connections 1024;
}
events模块提供的指令worker_connections 1024;
只能放在events区段才有意义。
有些指令可以写在配置文件顶部,起到全局效果:
不同区段可以互相嵌套:
上述例子展示了网站对nginx的配置,在http区段可以声明多个server区段,一个server区段允许配置一个虚拟主机和监听的端口,在server区段内允许插入多个location区段,当需要对特定的路径进行URL匹配时,Location区段允许对这些路径单独设置。
一个区段嵌套其它区段,被嵌套的区段将继承其父区段的设置,上述例子server区段设置了access_log指令来记录服务器所有的HTTP请求,在location区段同样生效,可以在location区段重新设置access_log:
指令值的单位
单位 | 描述 |
---|---|
k/K | 千字节 |
m/M | 兆字节 |
ms | Milliseconds–毫秒 |
s | Seconds–秒(默认时间单位) |
m | Minutes–分钟 |
h | Hours–小时 |
d | Days–天 |
w | Weeks–星期 |
m | Months–月(30天) |
y | Years–年(365天) |
变量
模块提供各种变量,注意:有些指令不允许使用变量,例如:
error_log logs/error-$nginx_version.log
这是一个有效的配置指令,但它只产生一个error-$nginx_version.log文件,并不解析变量。
字符串值
将字符串作为指令值,可以没有引号,但如果使用的是特殊字符,例如:空格符、分号(;)、花括号({}),就需要使用引号将其括起:
root '/home/example.com/my web pages'
注意:无论使用单引号、双引号,nginx都认为没有区别。