例子:如果url符合正则格式并且$temp_flag正则匹配11111,则代理到bbb,否则代理到aaa

1
2
3
4
5
6
7
8
9
set $proxy_path aaa;
# 此处通过正则获取url第一个括号里的值,赋值给temp_flag
if ( $request_uri ~ ^\/([0-9a-z]+)\/(.*) ){
set $temp_flag $1;
}
if ($temp_flag ~ (^11111$)) {
set $proxy_path bbb;
}
proxy_pass http://$proxy_path;

uri和request_uri的区别

request_uri: 这个变量等于从客户端发送来的原始请求URI(最原始的),包括参数,它不可以进行修改。$uri变量反映的是重写后/改变的URI(最终的),不包括主机名。例如:"/foo/bar.php?arg=baz"

uri: 这个变量指当前的请求URI,不包括任何参数(见$args)。这个变量反映任何内部重定向或index模块所做的修改。注意,这和$request_uri不同,因$request_uri是浏览器发起的不做任何修改的原生URI。不包括协议及主机名。例如:"/foo/bar.html"

举例说明

案例1:
访问:http://127.0.0.1/test/
$uri:/test/test.html
$request_uri:/test/

案例2:
访问:http://127.0.0.1/
$uri:/index.html
$request_uri:/

案例3(服务器上不存在res目录):
访问:http://127.0.0.1/res
$uri:/res
$request_uri:/res