配置文件由指令与指令块构成
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