nginxlocation中多个if里面proxy_pa
ss="superseo">ss的方法
本文详细介绍了nginx中if的几种proxy_pass方式。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值。有需要的朋友会陪我去研究了解。
1。先来回顾一下nginx中位置的相关专业知识
1)1)位置的匹配说明:
~#波浪线表示进行常规匹配,英文大小写不同。
~*#表示执行常规匹配,不考虑英文大小写。
~#~表示通用标识符匹配,而不是常规匹配。如果该选项匹配,则只匹配该选项,不匹配其他选项。它通常用于匹配文件目录。
=#对通用标识符进行精确匹配
@#"@"定义一个命名位置并将其应用于内部项目,如error_page和try_files。
2)位置匹配的优先级(与位置在环境变量中的顺序无关)
1.=将首先解决精确匹配。如果找到完全匹配,nginx将停止搜索其他匹配。
2。将首先选择通用标识符匹配、正则表达式标准和长块标准,并检查匹配情况。换句话说,如果进行了这种匹配,就需要检查是否有正则表达式匹配和更长的匹配。
3。~只匹配标准,nginx停止搜索其他匹配,否则nginx会重新求解其他位置指令。[br/]
4。最终匹配原则包含“~”和“~*”指令。如果找到相对匹配,nginx将停止搜索其他匹配;当没有正则表达式或没有匹配到正则表达式时,将应用具有最高匹配级别的逐句匹配指令。
2。Proxy_传入nginx的几个if:
server{
listen127.0.0.1:80;
set$testA;
set$testBB;
location/{
if($test~*"A"){
proxy_passhttp://www.so.com;
break;
}
if($testB~*"B"){
proxy_passhttp://www.sogou.com;
#break;
}
}
}
考虑某个标准的时候拿某个proxy_pass。但是,如果考虑几个if,比如上面例子中的情况:如果第一个if中没有break,将执行下面的;为了在第一次匹配后更好地执行proxy_pass,可以添加break。(nginx里好像没有ifelse这样的指令)
3。具有不同解析参数的proxy_pass:
重写只能根据url匹配,不能匹配参数,所以必须用$arg_parameter来区分参数。
location/{
roothtml;
indexindex.htmlindex.htmindex.php;
proxy_redirectoff;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerHost$http_host;
proxy_http_version1.1;
proxy_set_headerConnection"";
if($query_string~*"usg=0"){
proxy_passhttp://local_workera;
}
if($query_string~*"usg=1"){
proxy_passhttp://local_workerb;
}
if($arg_uid~*"(.*[AB]$)"){
proxy_passhttp://local_workerf;
}
proxy_passhttp://local_workera;
}
1)路径中的参数usg=0和usg=1要求明确,应用$query_string进行常规匹配即可;($query_string的值是请求中的所有参数)
2)接下来,大家认为如果uid的值是基于A和B末尾的要求,那么就由local_workerf来解决,而此刻,没有办法用$query_string进行常规匹配;(由于/?1A&;t=1&Usg=1和/?uid=123&t=A&Usg=0不太匹配。)此时只使用$arg_uid进行常规匹配。
3)因为usg=0和usg=2这两个参数是相互独立的,所以按照上面位置的if指令的逻辑,可以适当处理,不要打破,放在最上面。对于uid匹配,因为会和usg冲突,所以只需要放在最下面或者加break,也就是:
location/{
roothtml;
indexindex.htmlindex.htmindex.php;
proxy_redirectoff;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerHost$http_host;
proxy_http_version1.1;
proxy_set_headerConnection"";
if($arg_uid~*"(.*[AB]$)"){
proxy_passhttp://local_workerf;
break;
}
if($query_string~*"usg=0"){
proxy_passhttp://local_workera;
}
if($query_string~*"usg=1"){
proxy_passhttp://local_workerb;
}
proxy_passhttp://local_workera;
}
到目前为止,这篇关于proxy_pass在nginx中的几种if定位方式的文章已经在这里详细介绍过了。关于Nginx位置中proxy_pass的大量信息,请搜索您之前文章的内容或者再次访问下面的相关文章。期待你以后的申请!
评论列表(0条)