Nginx配置文件语法


配置文件由指令与指令块构成

1
2
3
4
http {


}

上面这样的,就是http的指令块

里面所有的指令都是由http来进行解析以及执行。而像stream是没有办法解析以及执行的。

1
include mime.types;

上面这一行就是指令。


每条指令以;分号结尾,指令与参数间以空格符号分隔

1
expires 3m;proxy_cache_key $host$uri$is_arg$args;

只要指令有;隔开,哪怕你两个指令写在同一行都是可以的。

不过可读性就显而易见了。

记得,不是以回车进行分隔的喔。

=。=

1
expires 3m;

这里expires为命令,而后面的3m为参数。使用空格进行分隔。

像下面这种,一个命令-proxy_cache_valid也可以接多个参数-200 304 302 1d

1
proxy_cache_valid 200 304 302 1d;

指令块以{ }大括号将多条指令组织在一起

http这个指令块里面放了指令 include upstream

upstream这个指令块里面又放了server指令。

我认为这里,都是相对来说的。对于http指令块来说,include upstream都是它里面的指令。而server对于upstream指令块又是里面的一条指令。

而且你会发现,在这里httpupstream都是可以看做指令块,但是http后面是没有名字的,而upstream后面是跟有名字thwp的。这个特性主要是看模块开发者的,不用过于纠结。文档咋写,我们就咋用。

include语句允许组合多个配置文件以提升可维护性

1
include mime.types;

这里的mime.types,其实就是nginx.conf隔壁的一个文件。

截取该文件的部分内容:

1
2
3
4
5
6
7
8
9
10
11
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
......
}

Nginx就是根据文件的后缀名,再根据这个关系表,再将该数据类型写入HTTP头部的Content-Type字段中,发送给客户端。

然后你回头一看,这个文件的内容,我有必要写在nginx.conf里面吗?

这个文件的内容就是相当于一个wiki,只需要用的时候查就行,但是没有它又不行。

一旦你把大量的内容加到nginx.conf,维护起来就GG了。

所以这个时候,使用include这个语法,文件的可读性/可维护性就不知道高到那里去。

使用#符号添加注释,提高可读性。

简单明了,就是注释。

写好注释,起码后面接盘的不会来提刀砍你。

使用$符号使用变量

1
proxy_cache_key $host$url$is_args$args;

本身proxy_cache_key这个方法/模块,是不提供后面的这个几个变量的-$host $url $is_args $args

那些变量都是其他模块去提供的。而proxy_cache_key只是去调用而已,调用的方式就是使用$。跟shell的变量调用差不多。

部分指令的参数支持正则表达式

1
~* \.(gif|jpg|jpeg)$

这个就是在location处使用了正则表达式。

配置文件中的时间单位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ms  milliseconds

s seconds

m minutes

h hours

d days

w weeks

M mouths,30days 按照30天算的喔

y years,365days 按照365天算的喔

例子:

1
expires    24h;

expires是属于ngx_http_headers_module的一个指令。

用于控制页面的缓存时间。

这里的指令就是把缓存时间设置成24小时

配置文件中的空间单位

1
2
3
4
5
6
7
缺省 bytes

k/K kilobytes

m/M megabytes

g/G gigabytes
1
Syntax: zone name [size];

zone在Nginx是设置共享内存用的,使得多个worker process在里面共享数据。

1
zone=client_sessions:1m
0%