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

相關文章
相關標籤/搜索