geo模块主要用于做全局负载均衡,根据不同地区的ip可以访问到不同的服务器,eg:
geo $geo {
# geo默认使用ip进行全局均衡,0.7.27版本之后支持指定变量做均衡
# eg geo $$arg_remote_addr $geo {...}
default default;
218.30.115.0/24 china_telecom;
202.106.182.0/24 china_unicom;
}
upstream default.server{
server 192.168.0.2;
}
upstream china_telecom.server{
server 192.168.0.3;
}
upstream china_telecom.server{
server 192.168.0.4;
}
http headers模块:添加额外的返回头信息
add_header指令用来添加一个请求头
expires控制页面缓存过期
http limit zone模块:
用于对针对条件进行会话的并发连接数限制,eg限制每个ip的并发连接数
eg:
http {
limit_zone one $binary_remote_addr 10m;
server{
location /download/{
limit_conn one 1;
}
}
}
limit_zone zone_name $var memory_max_size 定义一个数据区,记录会话状态信息,$var会判断会话的变量,memory_max_size 定义内存记录区的总容量
上边的实例:limit_zone one $binary_remote_addr 10m; 定义了一个叫one的记录区,大小为10m,以变量$binary_remote_addr作为会话的判断基准
limit_conn zone_name max_client_per_ip 设置一个会话的最大连接数
http limit req模块
允许对单个session会话,单个ip限定指定单位时间内的并发请求数,一定程度上减轻而已的dos攻击
http {
limit_req_zone $binary_req_zone zone=one:10m rate=1r/s;
...
server{
...
location /search/ {
limit_req zone=one burst=5;
}
}
}
limit_req_zone $session_var zone=name_of_zone:size rate=rate
默认none 用于定于一块内存存储区域,用来存储session会话的状态,session变量的值是由指定的变量构成,常设置为client ip如:$binary_remote_addr(使用binary_remote_addr可以比remote_addr节省64byte的存储空间,1M内存可以存储大概16000个会话)
限制的条件可以设置为 请求数/秒(r/s) 或者 请求数/分钟(r/m),
limit_req用于指定使用的内存存储区(zone)名称,以及最大的突发请求数(burse)
若请求的速率超过limit_req_zone设置的rate,这些请求将被延迟处理直到这些请求的数量不超过burst的值,这种情况下,请求返回503 Service Unavariable
上述示例的含义是:允许一个用户每秒不超过1个请求,同时处理的查询数量最多不超过5个,若查询数<5延迟非必须。可以设置nodelay eg:limit_req_zone zone=one burst=5 nodelay;
http map模块
允许分类或者映射一组值到一组不同的值,并且将这些值存储在一个变量里,eg
map $http_host $name{
hostnames;
default 0;
example.com 1;
*.example.com 1;
test.com 2;
*.test.com 2;
.size.com 3;
}
可以使用本地模块的映射来替代许多的server/location指令或者redirect eg:
map $uri $new{
default http://nj.com/home;
/aa http://aa.nj.com/;
/bb http://bb.nj.com/;
/join http://nj.com/users/join;
}
server {
server_name nj.com;
rewrite ^ $new redirect;
}
map指令:map $var1 $var2 {...}
定义了用来设置变量的映射表,default定义无匹配时的默认值
hostnames支持近似域名查找
include包含一个含有映射信息的文件
map_hash_max_size用于设置保存变量映射关系的哈希表的最大值
map_hash_bucket_size n 用于设置一张hash表中映射变量的最大值,应该取决于处理器的缓存大小