nginx location中多个if里面proxy_pass的方法

nginx location中多个if里面proxy_pass的方法,第1张

nginxlocation中多个if里面proxy_pass="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的大量信息,请搜索您之前文章的内容或者再次访问下面的相关文章。期待你以后的申请!

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/774177.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存