配置文件由指令与指令块构成
1http {
2
3
4}
上面这样的,就是http的指令块。
里面所有的指令都是由http来进行解析以及执行。而像stream是没有办法解析以及执行的。
1include mime.types;
上面这一行就是指令。
每条指令以;分号结尾,指令与参数间以空格符号分隔
1expires 3m;proxy_cache_key $host$uri$is_arg$args;
只要指令有;隔开,哪怕你两个指令写在同一行都是可以的。
不过可读性就显而易见了。
记得,不是以回车进行分隔的喔。
=。=
1expires 3m;
这里expires为命令,而后面的3m为参数。使用空格进行分隔。
像下面这种,一个命令-proxy_cache_valid也可以接多个参数-200 304 302 1d。
1proxy_cache_valid 200 304 302 1d;
指令块以{ }大括号将多条指令组织在一起
http这个指令块里面放了指令 include upstream。
而upstream这个指令块里面又放了server指令。
我认为这里,都是相对来说的。对于http指令块来说,include upstream都是它里面的指令。而server对于upstream指令块又是里面的一条指令。
而且你会发现,在这里http和upstream都是可以看做指令块,但是http后面是没有名字的,而upstream后面是跟有名字thwp的。这个特性主要是看模块开发者的,不用过于纠结。文档咋写,我们就咋用。
include语句允许组合多个配置文件以提升可维护性
1include mime.types;
这里的mime.types,其实就是nginx.conf隔壁的一个文件。
截取该文件的部分内容:
1types {
2 text/html html htm shtml;
3 text/css css;
4 text/xml xml;
5 image/gif gif;
6 image/jpeg jpeg jpg;
7 application/javascript js;
8 application/atom+xml atom;
9 application/rss+xml rss;
10 ......
11}
Nginx就是根据文件的后缀名,再根据这个关系表,再将该数据类型写入HTTP头部的Content-Type字段中,发送给客户端。
然后你回头一看,这个文件的内容,我有必要写在nginx.conf里面吗?
这个文件的内容就是相当于一个wiki,只需要用的时候查就行,但是没有它又不行。
一旦你把大量的内容加到nginx.conf,维护起来就GG了。
所以这个时候,使用include这个语法,文件的可读性/可维护性就不知道高到那里去。
使用#符号添加注释,提高可读性。
简单明了,就是注释。
写好注释,起码后面接盘的不会来提刀砍你。
使用$符号使用变量
1proxy_cache_key $host$url$is_args$args;
本身proxy_cache_key这个方法/模块,是不提供后面的这个几个变量的-$host $url $is_args $args。
那些变量都是其他模块去提供的。而proxy_cache_key只是去调用而已,调用的方式就是使用$。跟shell的变量调用差不多。
部分指令的参数支持正则表达式
1~* \.(gif|jpg|jpeg)$
这个就是在location处使用了正则表达式。
配置文件中的时间单位
1ms milliseconds
2
3s seconds
4
5m minutes
6
7h hours
8
9d days
10
11w weeks
12
13M mouths,30days 按照30天算的喔
14
15y years,365days 按照365天算的喔
16
例子:
1expires 24h;
expires是属于ngx_http_headers_module的一个指令。
用于控制页面的缓存时间。
这里的指令就是把缓存时间设置成24小时。
配置文件中的空间单位
1缺省 bytes
2
3k/K kilobytes
4
5m/M megabytes
6
7g/G gigabytes
1Syntax: zone name [size];
zone在Nginx是设置共享内存用的,使得多个worker process在里面共享数据。
1zone=client_sessions:1m
