ngxin判斷雙重規則

nginx的配置中不支持if條件的邏輯與&& 邏輯或|| 運算 ,而且不支持if的嵌套語法,否則會報下面的錯誤:nginx: [emerg] invalid condition。

我們可以用變量的方式來間接實現。

要實現的語句:

view sourceprint?

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

如果按照這樣來配置,就會報nginx: [emerg] invalid condition錯誤。

可以這麼來實現,如下所示:

view sourceprint?

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.html



簡單防止重複URL 請求



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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章