ngxin判断双重规则

nginx的配置中不支持if条件的逻辑与&& 逻辑或|| 运算 ,并且不支持if的嵌套语法,不然会报下面的错误:nginx: [emerg] invalid condition。php

咱们能够用变量的方式来间接实现。html

要实现的语句:nginx

view sourceprint?浏览器

if ($arg_unitid = 42012 && $uri ~/thumb/){
 echo "www.ttlsa.com";
}

若是按照这样来配置,就会报nginx: [emerg] invalid condition错误。bash

能够这么来实现,以下所示:运维

view sourceprint?ide

set $flag 0;
if ($uri ~ ^/thumb/[0-9]+_160.jpg$){
 set $flag "${flag}1";
}
if ($arg_unitid = 42012){
 set $flag "${flag}1";
}
if ($flag = "011"){
 echo "www.ttlsa.com";
}

转载请注明来自运维生存时间:  http://www.ttlsa.com/html/3876.htmlspa



简单防止重复URL 请求
.net



if ($request_uri ~ "xxx.php?xxx") {
 set $iftmp Y;
 }
 if ($http_user_agent ~ "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)") {
 set $iftmp "${iftmp}Y";
 }
 if ($iftmp = YY) { return 400;}
 location / {
 proxy_pass https://172.0.0.11;
 }
 

重(www.111cn.net)点一 set $iftmp Y 将iftmp设置为Y,set命令是一个大大的亮点

重点二 仍是set部分set $iftmp "${iftmp}Y" 在set里面 ${iftmp}Y将参数叠加一次,${iftmp}是一个大大的亮点.

$request_uri是客户端请求的完整请求路径,$http_user_agent是用户端发出请求的浏览器参数.
上面的if判断是一个简单防cc***的原型,通常普通的cc***会固定***页面,而后浏览器参数也大多不变,当前两个if参数同时知足后第三个if就直接返回给请求端400错误,
from:http://www.111cn.net/sys/nginx/45849.htm
code

相关文章
相关标签/搜索