一、nginx变量
1)set指令:server,location
set $v 0;
2)map模块:http
map $v $b {
0 'baidu';
1 'google';
}
3)geo模块:http
geo $geo {
default default;
192.168.1.0/24 aa;
192.168.2.0/24 bb;
}
upstream aa.server {
server 192.168.3.1:8081;
}
upstream bb.server {
server 192.168.3.1:8082;
}
upstream default.server {
server 192.168.3.1:8080;
}
4)正则匹配生成变量$domain
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
location ~* \.(gif|jpg|jpeg)$ {
root htdocs/$1;
}
}
5)内建变量:有90%都是在ngx_variables.c定义的,剩下的跟在各个功能实现模块里面
--名称固定,如:
$request_time:请求的响应时间
$upstream_response_time:后端处理请求的时间
$uri、$request_uri、$host等
--前缀匹配:
6)变量类型
--只读:大部分nginx的内建变量都是只读变量,常用的例外是$args变量
--可读写:
1. 核心内建变量$args、某些模块的内建变量
2. set 设置的变量
3. map、geo创建的变量
4. 正则匹配创建的变量
7)变量值的传递:在一次请求处理过程中经历的所有块中共享传递
1.内部rewrite、内部跳转和子请求三种情况下变量值是共享的
2.共享不代表值不改变,比如$arg_XXX这类动态计算的变量值
8)变量的一些特点
1.不区分大小写
2.如要获取请求头的Accept-Charset,写成$http_accept_charset
3.$request_time时间为0,因为nginx时间有缓存